我正在编写一个将以通用形式使用的Ubuntu bash脚本。我想知道是否可以以管道方式传递多个命令。这就是我想要实现的目标:
#!/bin/bash
cat $1 | $2 | while read line
do
# do something
done
脚本将按如下方式运行:
./myscript.sh data.txt "grep status | grep Approved"
这是否可能实现。我有一个去,但只是远远的:
./myscript.sh data.txt "grep status"
这很有用。
这可能吗?我可以重用这个脚本传递不同的命令来做不同的事情,但每个命令都有公共代码,即myscript.sh。
当做某事被替换为:
echo $2
这会显示输入到第二个参数的内容。
答案 0 :(得分:0)
问题是|
必须字面上存在于命令行中才能被解释为控制操作符。作为变量扩展的结果,它被解释为字符串|
,即就像您在命令行上输入'|'
一样。
您可以使用eval
让shell将变量解释为新的管道或命令列表。然而,它打开了另一种蠕虫病毒 - 您可能需要引入另一级别的引用,并且需要注意不要遇到安全问题。
pipeline='grep a | grep b'
echo a b c | eval "$pipeline"