Unix命令行用管道重复命令

bgu*_*uiz 3 unix bash command-line pipe

我想编写一个脚本来重复一个通常包含管道的命令行

./myscript.sh ls -lart |grep ^d
Run Code Online (Sandbox Code Playgroud)

而在myscript.sh我做了一堆东西,然后想执行ls -lart |grep ^d和管道从输出到别的东西。

(如果这真的很简单并且有 1 线解决方案,请提前抱歉)。

到目前为止我已经尝试过

$@ | someothercommand
Run Code Online (Sandbox Code Playgroud)

$* | someothercommand
Run Code Online (Sandbox Code Playgroud)

但无济于事...

Mar*_*ton 8

shell 解析命令行的方式意味着 shell 脚本的输入将在它到达管道时停止。您可能需要做的是将您的命令行放在引号中,因此:

./myscript.sh "ls -lart |grep ^d"
Run Code Online (Sandbox Code Playgroud)

然后在您的脚本中使用eval命令来执行它,如下所示:

 eval "$@" | someothercommand 
Run Code Online (Sandbox Code Playgroud)