gpt4 book ai didi

bash - shell脚本中有没有办法找出它的输出被重定向到哪里?

转载 作者:行者123 更新时间:2023-11-29 09:02:11 24 4
gpt4 key购买 nike

我们有遵循自然的脚本(在 cron 中)

someScript.sh >/tmp/cronlog/somescript.$(date +%Y%m%d).log 2>&1

现在有没有办法在 someScript.sh 中找出输出到哪个文件?

脚本发送带有摘要的电子邮件。同时我想提一下,可以在某某输出文件中找到详细信息 - 在电子邮件中。

我知道构造 if [ -t 1 ] 来检测 stdout 等,但如何获取输出文件名?请注意,我希望它是通用的,以便某些人可以更改 cron 中的输出文件,而无需修改脚本。

最佳答案

我能想到的最简单的事情是:

readlink -f /proc/$$/fd/1

$$ 是脚本的 PID(在脚本内部)。在大多数 unix 系统上,/proc/[pid] 是包含进程 [pid] 信息的伪目录。

/proc/[pid]/fd 是一个目录,其中包含进程的打开文件描述符的符号链接(symbolic link)列表。 fd/0 是输入,fd/1 是脚本的输出等。

如果您不重定向输出,readlink 会为您提供目标文件或 tty。

当然,如果你想显示它,你必须在标准输出之外的其他地方显示它,否则它会被重定向!要调试,请尝试标准错误 (2)。

各种调用在我的盒子上给出了这些结果(script.sh 只是调用 readlink -f/proc/$$/fd/1 >&2)

# ./script.sh
/dev/pts/0

# ./script.sh > /var/tmp/foo
/var/tmp/foo

# ./script.sh | more
/proc/12132/fd/pipe:[916212]

关于bash - shell脚本中有没有办法找出它的输出被重定向到哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10014083/

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