当我在命令行上运行它时,它可以工作:
ls | grep -v "#$"
但是当我做ls | scriptname
并且在脚本中我有:
#fileformat=unix
#!/bin/bash
grep -iv '#$'
它不起作用。为什么呢?
[编辑]
解释第一行的原因here。
除此之外,即使我删除前两行,它应该工作。我在远程Solaris帐户上尝试了相同的操作,但它确实有效。那么我的Fedora安装呢?
答案 0 :(得分:1)
hash-bang行需要是脚本中的第一行。摆脱#fileformat=unix
。还要确保您的脚本是可执行的(chmod +x scriptname
)。这有效:
#!/bin/bash
grep -iv '#$'
答案 1 :(得分:0)
将其更改为ls < scriptname
,以便将输出传递给ls。
答案 2 :(得分:0)
第一关你需要#! / bin / bash作为脚本的第一行。
然后'#$'在参数的shell pantheon中没有任何意义。你在排队的末尾搜索'#'吗? (那没问题)。但如果你的意思是'$#',那么$#就是参数,意思是“命令行上的参数数量”
通常,将文件列表传递给要执行操作的脚本必须使用进一步的包装器来完成。因此,您提出的问题的一般解决方案可能是:
$cat scriptname
#!/bin/bash
while read fileTargs ; do
grep -iv "${@}" ${fileTargs} # (search targets).
done
称为
ls | scriptname srchTargets
我希望这会有所帮助。