gpt4 book ai didi

Linux |命令输出到变量的后台分配

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

我需要运行 3 个命令,并将它们的(单行)输出分配给 3 个不同的变量,然后我使用这些变量写入文件。我想等到所有 3 个变量的赋值完成,然后再将变量 echo 到文件。我在 bash 脚本中循环运行它们。

这是我试过的-

var1=$(longRunningCommand1) &
var2=$(longRunningCommand2) &
var3=$(longRunningCommand3) &

wait %1 %2 %3
echo "$var1,$var2,$var3">>$logFile

这根本没有为变量提供任何值。我明白了-

,,
,,
,,

但是,如果我尝试这个——

var1=$(longRunningCommand1 &)
var2=$(longRunningCommand2 &)
var3=$(longRunningCommand3 &)

wait %1 %2 %3
echo "$var1,$var2,$var3">>$logFile

我得到了想要的输出,

o/p of longRunningCommand1, o/p of longRunningCommand2, o/p of longRunningCommand3
o/p of longRunningCommand1, o/p of longRunningCommand2, o/p of longRunningCommand3
o/p of longRunningCommand1, o/p of longRunningCommand2, o/p of longRunningCommand3

但是这个 shell 脚本的 nohup.out 表明没有等待的后台作业 -

netmon.sh: line 35: wait: %1: no such job
netmon.sh: line 35: wait: %2: no such job
netmon.sh: line 35: wait: %3: no such job

我不会为此烦恼太多,但我绝对需要确保我的脚本在尝试写入之前等待分配所有 3 个变量。而 nohup.out 告诉我的不是这样!我想我想知道当我遇到这 3 个命令中的任何一个运行超过几秒钟的情况时,第二种方法是否正确。我还没有能够在盒子上获得真正长时间运行的命令或资源争用来真正解决我的这个疑问。

非常感谢您提供任何有用的想法。

-公吨

最佳答案

您的目标是编写 echo "$var1,$var2,$var3">>$logFile 的输出,同时为 longRunningCommand1, ..2, ..3 可以使用 list 和重定向来完成。正如@that_other_guy 指出的那样,您无法将命令替换的结果分配给后台的变量。但是,对于像 bash 这样提供进程替换的 shell,您可以在后台将进程的输出写入文件,并通过 ';' 分隔您的进程和重定向> 将确保 command1, ..2, ..3 顺序写入日志文件,例如:

Commands that are separated by a <semicolon> ( ';' ) 
shall be executed sequentially.

POSIX Specification - lists

将这些部分放在一起,您将按顺序将评论结果写入 $logfile,并使用类似于以下内容的内容,

( (longRunningCommand1) >> $logfile; (longRunningCommand2) >> $logfile; \
(longRunningCommand3) >> $logfile) &

(注意写入$logfile的命令之间的';')

虽然不是必需的,但如果您想等到所有命令都写入脚本中的 $logfile(并且您的脚本支持 $! 作为 PID最后一个后台进程),您可以简单地wait $!,尽管这不是确保文件写入完成所必需的。

关于Linux |命令输出到变量的后台分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48797976/

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