2017-04-24 78 views
-1

我正在编写将用于一般形式的Ubuntu bash脚本。我想知道是否可以通过管道方式传递多个命令。这就是我想才达到:Ubuntu脚本接受管道命令

#!/bin/bash 
cat $1 | $2 | while read line 
do 
    # do something 
done 

的脚本是这样运行的:

./myscript.sh data.txt "grep status | grep Approved" 

这是可能被achived。我有一个去,但只有得到:

./myscript.sh data.txt "grep status" 

这工作。

这可能吗?我可以重复使用这个脚本来传递不同的命令来做不同的事情,但每个命令都有一个共同的代码,即myscript.sh。

当的做一些事情被替换为:

echo $2 

这不显示的内容是在向第二个参数类型。

回答

0

问题是|必须从字面上出现在命令行中才能被解释为控制操作符。作为可变扩展的结果,它被解释为字符串|,即,如果您在命令行上输入了'|'

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

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