grep的内部shell脚本不工作
当我在命令行它的工作原理上运行此:grep的内部shell脚本不工作
ls | grep -v "#$"
但是当我做ls | scriptname
和脚本里面我有:
#fileformat=unix
#!/bin/bash
grep -iv '#$'
它不工作。为什么?
[编辑]
用于第一线的原因进行说明here。
除此之外,即使我删除前两行它应该工作。我在远程Solaris帐户上尝试了完全相同的功能,但确实有效。那么是我的Fedora安装?
散列爆炸线需要是脚本中的第一行。摆脱#fileformat=unix
。还要确保你的脚本是可执行的(chmod +x scriptname
)。这工作:
#!/bin/bash
grep -iv '#$'
我不知道发生了什么,但它现在正在工作...感谢您的帮助 – raoulbia 2011-04-28 18:38:08
将其更改为ls < scriptname
以便将输出传递给ls。
首先你需要#!/bin/bash作为脚本的第一行。
然后'#$'在shell参数中没有意义。你在行尾寻找'#'吗? (那没问题)。但是,如果你的意思是'$#',但是$#是参数,这意味着'命令行上的参数数量'
通常,将文件列表传送给脚本以执行操作必须完成进一步包装。所以,一个最基本的,通用的解决方案为您带来可能是问题:
$cat scriptname
#!/bin/bash
while read fileTargs ; do
grep -iv "${@}" ${fileTargs} # (search targets).
done
称为
ls | scriptname srchTargets
我希望这有助于。
“您是否在行末搜索'#'?”是 – raoulbia 2011-04-28 18:04:09
yes agree,删除前2行应该仍然有效,因为你的脚本被默认shell解释,几乎可以肯定是bash。但是文件中的'#fileformat = unix'只能是注释。请注意,你所包含的链接,他们指的是用'vi'编辑器编辑文件,确切的用法是':fileformat = unix'(注意':'char)。像':var = value'这样的文本是vi说'设置一个vi选项',在这种情况下,fileformat = unix的意思是'only only \ n(LF)char end of line not the DOS version of \ r \ n CR,LF)。其他海报是正确的,你不希望#f ..在顶部! – shellter 2011-04-28 18:36:54