[英]STDOUT of nested commands in Bash
bash相当新-我正在尝试将/ usr / bin / time命令的输出存储到TIME_INFO变量中,该变量可与以下设置一起使用...但是,我也希望能够存储某些输出其他嵌套命令(例如/ usr / local / bin / firejail或./program)中的其他命令。 当前,如果./program中存在运行时异常,则还将转到TIME_INFO变量。
TIME_INFO=$( /usr/bin/time --quiet -f "%e-%U-%S-%M-%x" 2>&1 \
timeout 5s \
/usr/local/bin/firejail --quiet --cgroup=/sys/fs/cgroup/memory/group1/tasks --profile=java.profile \
./program < test.in > test.out )
有没有办法完成多个嵌套命令的输出分离?
提前致谢!
一种方法是在调用链中注入一个shell,并使它负责为其子进程修改stderr:
time_info=$( /usr/bin/time --quiet -f "%e-%U-%S-%M-%x" 2>&1 \
sh -c '"$@" 2>"$0"' test.err \
timeout 5s \
/usr/local/bin/firejail \
--quiet --cgroup=/sys/fs/cgroup/memory/group1/tasks --profile=java.profile \
./program < test.in > test.out )
# read your content back into a shell variable
error_text=$(<test.err)
此处的相关更改是sh -c '"$@" 2>"$0"
,它以命令的形式运行其参数,并将stderr重定向到$0
传递的文件名-从紧随sh -c
传递的代码之后的字符串中填充sh -c
。
请注意,我根据POSIX指南修改了TIME_INFO
变量的大小写,为具有外壳程序或OS含义的变量指定了全大写名称,并为其他目的保留了至少一个小写字符的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.