Bash 执行awk输出 读行时; 做 awk'/different$/{打印“diff”$2“$4”>“$2.diff”}{}”; 完成“$2\”.diff“,$2,$4,$2)}'diffs.txt | sh实际上,到sh的管道也是不必要的:)如果awk输出是一个需要自己的终端或伪终端的命令,则此操作不起作用。比如ssh或tmux。 while read line; do $(awk '/ differ$/ {print "diff "$2" "$4" > "$2".diff"}{}') done < diffs.txt
这会完全按照我的要求打印命令。我如何告诉它执行命令?Bash 执行awk输出 读行时; 做 awk'/different$/{打印“diff”$2“$4”>“$2.diff”}{}”; 完成“$2\”.diff“,$2,$4,$2)}'diffs.txt | sh实际上,到sh的管道也是不必要的:)如果awk输出是一个需要自己的终端或伪终端的命令,则此操作不起作用。比如ssh或tmux。 while read line; do $(awk '/ differ$/ {print "diff "$2" "$4" > "$2".diff"}{}') done < diffs.txt,bash,unix,awk,Bash,Unix,Awk,这会完全按照我的要求打印命令。我如何告诉它执行命令?| bash做这个把戏 while read line; do awk '/ differ$/ {print "diff "$2" "$4" > "$2".diff"}{}'; done < diffs.txt 读行时; 做 awk'/different$/{print“diff”$2“$4”>“$2.diff”}{}bash; 完成“$2.diff”}{} 完成
| bash
做这个把戏
while read line;
do
awk '/ differ$/ {print "diff "$2" "$4" > "$2".diff"}{}';
done < diffs.txt
读行时;
做
awk'/different$/{print“diff”$2“$4”>“$2.diff”}{}bash;
完成
您可以使用“系统”命令执行这些类型的任务
while read line;
do
awk '/ differ$/ {print "diff "$2" "$4" > "$2".diff"}{}' | bash;
done < diffs.txt
该问题的公认答案(由@micheal)仅部分正确。它几乎适用于所有情况,除非命令需要创建新的终端或伪终端。像“ssh”命令或“tmux new”
以下代码也适用于这些情况
awk '/ differ$/ {system("diff "$2" "$4" > "$2".diff")} diffs.txt
读行时;
做
$(awk'/different$/{print“diff”$2”“$4”>“$2.diff”}{}
完成
$()是bash命令替换模式。您可以在以下Linux文档项目中阅读有关命令替换的更多信息: to告诉您如何使用Bash的进程替换来完成。那对你不管用吗?发生了什么?除非脚本是一个特定的Bash脚本,否则您最好使用
sh
。此外,出于经济性和可理解性的考虑,我会将管道放在done
之后。实际上,while
循环也是不必要的awk'/difference$/{printf(“diff\%s\\%s\”>“$2\”.diff“,$2,$4,$2)}'diffs.txt | sh
实际上,到sh的管道也是不必要的:)如果awk输出是一个需要自己的终端或伪终端的命令,则此操作不起作用。比如ssh或tmux。
while read line;
do
$(awk '/ differ$/ {print "diff "$2" "$4" > "$2".diff"}{}')
done < diffs.txt