开发者

bash: comment a long pipeline

I've found that it's quite powerful to create long pipelines in bash scripts, but the main drawback that I see is that there doesn't seem to be a way to insert comments.开发者_JAVA技巧

As an example, is there a good way to add comments to this script?

#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"


Let the pipe be the last character of each line and use # instead of \, like this:

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


This works too:

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

based on https://stackoverflow.com/a/5100821/1019205. it comes down to s/|//;s!\!|!.


Unless they're spectacularly long pipelines, you don't have to comment inline, just comment at the top:

# 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"

As long as comments are relatively localised, it's fine. So I wouldn't put them at the top of the file (unless your pipeline was the first thing in the file, of course) or scribbled down on toilet paper and locked in your desk at work.

But the first thing I do when looking at a block is to look for comments immediately preceding the block. Even in C code, I don't comment every line, since the intent of comments is to mostly show the why and a high-level how.


#!/bin/bash

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

I don't understand the need for vncconfig if all it does is append '(user)' which you subsequently remove for the call to xdpyinfo. Also, all those pipes take quite a bit of overhead, if you time your script vs mine I think you'll find the performance comparable if not faster.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜