![Unix 命令行使用管道重复命令](https://linux22.com/image/1232502/Unix%20%E5%91%BD%E4%BB%A4%E8%A1%8C%E4%BD%BF%E7%94%A8%E7%AE%A1%E9%81%93%E9%87%8D%E5%A4%8D%E5%91%BD%E4%BB%A4.png)
我想编写一个脚本来重复通常包含管道的命令行
./myscript.sh ls -lart |grep ^d
我myscript.sh
做了一堆事情,然后想要执行ls -lart |grep ^d
并将其输出传输到其他东西中。
(如果这真的很简单并且有一行解决方案,那么提前抱歉)。
到目前为止我已经尝试过
$@ | someothercommand
和
$* | someothercommand
但无济于事...
答案1
shell 解析命令行的方式意味着 shell 脚本的输入将在到达管道时停止。为了解决这个问题,您可能需要将命令行放在引号中,因此:
./myscript.sh "ls -lart |grep ^d"
然后在脚本中使用eval
命令执行它,如下所示:
eval "$@" | someothercommand