相关疑难解决方法(0)

如何输出到屏幕覆盖重定向

是否可以在 shell 脚本中在重定向 STDOUT 和 STDERR 时写入屏幕?

我有一个 shell 脚本,我想捕获 STDOUT 和 STDERR。该脚本可能会运行一个小时或更长时间,所以我想偶尔向屏幕写入一些状态消息,这些消息将显示而不是重定向(未捕获)。

举个简单的例子,我有一个 shell 脚本,比如说“./myscript.sh”:

#!/bin/sh -u

echo "Message A: This writes to STDOUT or wherever '1>' redirects to."
echo "Message B: This writes to STDOUT or wherever '1>' redirects to.">&1
echo "Message C: This writes to STDERR or wherever '2>' redirects to.">/dev/stderr
echo "Message D: This writes to STDERR or wherever '2>' redirects to.">&2
echo "Message E: Write this to 'screen' regardless of (overriding) redirection." #>???  
Run Code Online (Sandbox Code Playgroud)


然后,例如,当我像这样运行脚本时,我希望看到这个输出:

[~]# …
Run Code Online (Sandbox Code Playgroud)

bash io-redirection shell-script

10
推荐指数
1
解决办法
3万
查看次数

在没有临时文件的情况下将 STDERR 和 STDOUT 重定向到不同的变量

func() {
    echo 'hello'
    echo 'This is an error' >&2
}

a=$(func)
b=???
Run Code Online (Sandbox Code Playgroud)

我想将 stderr 重定向到b变量而不创建临时文件。

 echo $b
 # output should be: "This is an error"
Run Code Online (Sandbox Code Playgroud)

有效但使用临时文件的解决方案:

touch temp.txt
exec 3< temp.txt
a=$(func 2> temp.txt);
cat <&3
rm temp.txt
Run Code Online (Sandbox Code Playgroud)

所以问题是,如何在不需要临时文件的情况stderr下将函数的重定向func到变量b

bash io-redirection shell-script stderr variable

9
推荐指数
1
解决办法
6354
查看次数

标签 统计

bash ×2

io-redirection ×2

shell-script ×2

stderr ×1

variable ×1