簡體   English   中英

Bash中嵌套命令的STDOUT

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM