Ubuntu脚本接受管道命令

时间:2017-04-24 14:36:58

标签: linux bash ubuntu

我正在编写一个将以通用形式使用的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

这会显示输入到第二个参数的内容。

1 个答案:

答案 0 :(得分:0)

问题是|必须字面上存在于命令行中才能被解释为控制操作符。作为变量扩展的结果,它被解释为字符串|,即就像您在命令行上输入'|'一样。

您可以使用eval让shell将变量解释为新的管道或命令列表。然而,它打开了另一种蠕虫病毒 - 您可能需要引入另一级别的引用,并且需要注意不要遇到安全问题。

pipeline='grep a | grep b'
echo a b c | eval "$pipeline"