gpt4 book ai didi

bash - 是否可以将错误输出发送到bash中的变量?

转载 作者:行者123 更新时间:2023-12-03 07:46:12 25 4
gpt4 key购买 nike

我有简单命令的错误结果:

cp -R SourceDir DestDir 2>out.txt 
result="out.txt"

但是,如果脚本没有写权限,如何在可变结果中获取错误输出?

最佳答案

一种选择是将文件写入您具有权限的位置:

cp -R SourceDir DestDir 2>${TMPDIR:-/tmp}/out.$$.err

另一个选择是捕获变量中的错误(和非错误)输出:
output=$(cp -R SourceDir DestDir 2>&1)
echo "$output"

请注意,第一个变体创建特定于进程的临时文件。因此生成的文件名不是很安全。如果您以root用户身份在敌对环境中工作,则需要采取更多预防措施来生成容易预测的文件名。对于大多数用户而言,大多数时候就足够了,尤其是如果 $TMPDIR环境变量指向其他用户无法写入的某个目录(例如 $HOME/tmp)。使用包含 $$的名称可确保如果两个人同时运行脚本,那么他们不会意外地干扰彼此的日志文件。

如果该过程被中断,您还应该采取预防措施来清理文件。该样板(模板)中显示了执行此操作的方法:
tmp=${TMPDIR:-/tmp}/out.$$.err
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15 # EXIT HUP INT QUIT PIPE TERM

# Command using temporary file
cp -R SourceDir DestDir 2>$tmp

# Analyse contents...

# Clean up
rm -f $tmp
trap 0
exit 0

您可以以非零状态( exit $status)退出;关键是要删除文件,然后取消“退出时的陷阱”。 HUP,INT,QUIT,PIPE和TERM信号是进程最有可能接收的信号,在所有这些情况下,shell都会删除临时文件并以非零状态退出(本例中为1)。

关于bash - 是否可以将错误输出发送到bash中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8061805/

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