参数列表中的注释?

参数列表中的注释?

某些命令(例如rsync)将列表作为参数。这些文件可以包含 unix 注释吗#

答案1

除非该命令的文档明确提到它可以包含注释,否则假设它不能包含注释。

答案2

在这种情况下,我通常做的是构建一个参数数组(可以接受注释),然后将它们传递给 rsync 等。

#!/bin/bash
rsync_args=(
    # Show me what you're doing
    --itemize-changes
    # All HTML and resources
    *.html *.css *.js
    # All PHP source code
    *.php
    # To the live server
    live:
)
rsync "${rsync_args[@]}";

答案3

如果我理解正确的话,您想在文件列表中添加有关文件的注释。这是不可能的,因为当 shell 遇到 # 字符时,它将忽略命令行上所有剩余的字符。实现此目的的一种方法是将 rsync 与 --files-from=filelist 参数一起使用。文件列表文件可以包含注释。

另一方面,如果您想在文件名中嵌入 # 字符,那么这将起作用。例如,使用 bash:

touch a#b 
touch 'a #b' 
touch "a #b"

答案4

伊格纳西奥·巴斯克斯·艾布拉姆斯# comments答案是最安全的,但如果你真的想这样做(就像我在某些情况下所做的那样),一个简单的解决方法可以轻松地通过处理占用整条线的问题 来至少部分实现。

如果您想处理真实列表数据行后面的注释,事情可能会变得有点棘手,除非您确定数据行不包含嵌入#字符。

您可以使用流程替代和一个简单的帮助脚本。

这里有些例子。 beforegrc生成diff彩色输出。
我使用过 bash 函数,但您当然可以将它们保存到脚本文件中。

# nocom handles comment-only lines (ie. no dat)
#       it ignores any # chars embedded in your data lines.
#
  nocom() { sed -e '/^[[:space:]]*#/d' "$1"; }

# NOCOM handles handles comments which occurr after your data   
#       as well as comment-only lines.  
#       Do not use NOCM unless you are CERTAIN that your data
#       lines contain no  # chars.
#
  NOCOM() { sed -n '/^[[:space:]]*#/d; s/^\([^#][^#]*[^[:space:]]\)[[:space:]]*#.*/\1/; p' "$1"; }

printf '# a bit of hokus-pokus
        # you see the coments here, 
        # but the calling program will not.
$HOME/bin/abra
$HOME/bin/kadabra  # comment after data
$HOME/bin/sim# another comment after data
' >file

echo == nocom ==
cat <(nocom "file")
echo == NOCOM ==
cat <(NOCOM "file")
echo == diff ==
grc diff "file" <(NOCOM "file")

这是输出:

== nocom ==
$HOME/bin/abra
$HOME/bin/kadabra  # comment after data
$HOME/bin/sim# another comment after data
== NOCOM ==
$HOME/bin/abra
$HOME/bin/kadabra
$HOME/bin/sim
== diff ==
1,3d0
< # a bit of hokus-pokus
<         # you see the coments here, 
<         # but the calling program won't.
5,6c2,3
< $HOME/bin/kadabra  # comment after data
< $HOME/bin/sim# another comment after data
---
> $HOME/bin/kadabra
> $HOME/bin/sim

相关内容