Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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