我有一个很长的shell命令,如下所示:
cat file \
| perl -pe 's/...//g' \
| grep -v "hehe" \
| $HOME/scripts/foo.pl \
| sort | uniq -c
现在我想将整个管道放入脚本script.sh
,以便命令变为:
cat file | ./script.sh
理想情况下,脚本应该也可以像这样调用:
./script.sh file
但是我该如何编写该脚本?这对我来说似乎并不简单。有什么建议吗?
答案 0 :(得分:1)
script.sh的内容:
cat $1 \
| perl -pe 's/...//g' \
| grep -v "hehe" \
| $HOME/scripts/foo.pl \
| sort | uniq -c
然后将其作为./script.sh file
运行。
应该做的伎俩。
请注意引用第一个(也是唯一的)命令行参数的$1
。
答案 1 :(得分:0)
将一些简单的shell与一个小的Perl DWIMery结合起来,你可以让你的脚本做正确的事。
#!/bin/bash
perl -pe 's/...//g' "$@" \
| grep -v "hehe" \
| $HOME/scripts/foo.pl \
| sort | uniq -c
您可以将其设为./script.sh file
,它将显示为file
或grep foo file | ./script.sh
,并且会从STDIN
读取。在bash和其他一些shell "$@"
中扩展为引用的参数列表,如果没有参数则不会扩展。当perl
没有任何文件参数时,它将默认从STDIN
读取。