如何在bash脚本中检测stdout和stderr日志的去向?
我使用不同的参数多次从cron调用bash脚本,并将其输出重定向到不同的日志,大致如下所示:如何在bash脚本中检测stdout和stderr日志的去向?,bash,logging,stdout,Bash,Logging,Stdout,我使用不同的参数多次从cron调用bash脚本,并将其输出重定向到不同的日志,大致如下所示: * * * * * /home/bob/bin/somescript.sh someparameters >> /home/bob/log/param1.log 2>&1 我需要我的脚本在本例中输入一些变量值“/home/bob/log/param1.log”。它还可以为logfilename计算一个日期,而不是“param1”。到目前为止,主要原因是为了类似的目的重复使用相
* * * * * /home/bob/bin/somescript.sh someparameters >> /home/bob/log/param1.log 2>&1
我需要我的脚本在本例中输入一些变量值“/home/bob/log/param1.log”。它还可以为logfilename计算一个日期,而不是“param1”。到目前为止,主要原因是为了类似的目的重复使用相同的脚本,并且能够通过监控文件夹通知用户应该在哪里查找更多信息-在一些警告文件中给他一个日志文件名
如何检测输出(&1或&1和&2两者)进入哪个日志?在运行时/usr/bin/lsof或/usr/sbin/lsof打开文件
lsof -p $$ -a -d 1
lsof -p $$ -a -d 2
filename1=$(lsof -p $$ -a -d 1 -F n)
filename1=${filename1#*$'\n'n}
filename2=$(lsof -p $$ -a -d 2 -F n)
filename2=${filename2#*$'\n'n}
在运行时/usr/bin/lsof或/usr/sbin/lsof提供打开的文件
lsof -p $$ -a -d 1
lsof -p $$ -a -d 2
filename1=$(lsof -p $$ -a -d 1 -F n)
filename1=${filename1#*$'\n'n}
filename2=$(lsof -p $$ -a -d 2 -F n)
filename2=${filename2#*$'\n'n}
如果您正在运行Linux,则可以从proc文件系统读取信息。假设您在
stdout.sh.
#! /bin/bash
readlink -f /proc/$$/fd/1 >&2
它以交互方式显示您的终端
$ ./stdout.sh
/dev/pts/0
并通过重定向显示目的地
$ ./stdout.sh > nix
/home/ceving/nix
如果您正在运行Linux,则可以从proc文件系统读取信息。假设您在
stdout.sh.
#! /bin/bash
readlink -f /proc/$$/fd/1 >&2
它以交互方式显示您的终端
$ ./stdout.sh
/dev/pts/0
并通过重定向显示目的地
$ ./stdout.sh > nix
/home/ceving/nix
请注意,
lsof
是一个非标准实用程序。请注意,lsof
是一个非标准实用程序。看见