gpt4 book ai didi

linux - 用于接受管道命令的 Ubuntu 脚本

转载 作者:太空宇宙 更新时间:2023-11-04 05:19:34 25 4
gpt4 key购买 nike

我正在编写一个 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。

当 do Something 被替换为:

echo $2

这确实显示了第二个参数中输入的内容。

最佳答案

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

您可以使用eval让shell将变量解释为新的管道或命令列表。不过,它会带来另一个麻烦 - 您可能需要引入另一个级别的引用,并且需要小心不要遇到安全问题。

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

关于linux - 用于接受管道命令的 Ubuntu 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43590992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com