2011-02-24 40 views
4

我发现它在bash脚本中创建长管道非常强大,但我看到的主要缺点是似乎没有插入注释的方法。bash:评论一条长管道

作为一个例子,有没有一种很好的方法来给这个脚本添加注释?

#find all my VNC sessions 
ls -t $HOME/.vnc/*.pid     \ 
    | xargs -n1       \ 
    | sed 's|\.pid$||; s|^.*\.vnc/||g' \ 
    | xargs -P50 --replace vncconfig -display {} -get desktop \ 
    | grep "($USER)"     \ 
    | awk '{print $1}'     \ 
    | xargs -n1 xdpyinfo -display  \ 
    | egrep "^name|dimensions|depths" 
+1

这并不回答你的问题,但我肯定你可以删除至少3个这些管道。不幸的是,我似乎没有'vncconfig',所以我不能测试它 – SiegeX 2011-02-24 05:46:56

+0

@SiegeX:我想看看它。 – bukzor 2011-02-24 06:50:51

+0

@bukzor如果您将'xargs'调用的输入和输出提供给'vncconfig',我会很高兴。尽管如此,只要你看到一个'grep'后跟'awk',你就可以将它们组合起来。在你的情况'awk -v user = $ USER'$ 0〜user {print $ 1}'' – SiegeX 2011-02-24 07:23:23

回答

20

让管是每行的最后一个字符用#代替\,像这样:

ls -t $HOME/.vnc/*.pid | #comment here 
    xargs -n1 | #another comment 
    ... 
+2

并观察,如果管道在管道中的每一步之后,则不需要(大部分)可怕和多余的反斜杠,它们看起来像是从海贝壳脚本中爬出来的。 – 2011-02-24 05:46:47

+0

正确!我<3 SO – bukzor 2011-02-24 06:44:43

0

,除非他们壮观长的管道,你不必在线评论,只是评论顶部:

# Find all my VNC sessions. 
# xargs does something. 
# sed does something else 
# the second xargs destroys the universe. 
# : 
# and so on. 

ls -t $HOME/.vnc/*.pid     \ 
    | xargs -n1       \ 
    | sed 's|\.pid$||; s|^.*\.vnc/||g' \ 
    | xargs -P50 --replace /opt/tools/bin/restrict_resources -T1 \ 
      -- vncconfig -display {} -get desktop 2>/dev/null \ 
    | grep "($USER)"     \ 
    | awk '{print $1}'     \ 
    | xargs -n1 xdpyinfo -display  \ 
    | egrep "^name|dimensions|depths" 

只要评论是relat原来本地化,没关系。所以我不会把它们放在文件的顶部(当然,除非你的管道是文件中的第一件),或者在卫生纸上潦草写下,并在工作时锁定在桌子上。

但是当我看块的时候我会做的第一件事就是直接在块之前寻找注释。即使在C代码中,我也不会评论每一行,因为评论的意图主要是显示why和高级别how

0
#!/bin/bash 

for pid in $HOME/.vnc/*.pid; do 
    tmp=${pid##*/} 
    disp=${tmp%.*} 
    xdpyinfo -display "$disp" | # commment here 
    egrep "^name|dimensions|depths" 
done 

我不明白vncconfig的需求,如果它是所有追加“(用户)”,这您随后删除了呼叫xdpyinfo。而且,所有这些管道都需要相当多的开销,如果你的脚本与我的脚本相比,我认为你会发现如果不是更快,性能可以比得上。

+0

关键是要仔细检查VNC会话是否属于我的。它经常发生机器崩溃,杀死我的VNC,并且另一个用户弹出并获得曾经是我的显示器。性能比较慢,因为xargs提供并行化(-P50)。许多查询不会在30秒后返回并超时。 – bukzor 2011-02-25 03:47:46