Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash脚本中检测stdout和stderr日志的去向?_Bash_Logging_Stdout - Fatal编程技术网

如何在bash脚本中检测stdout和stderr日志的去向?

如何在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”。到目前为止,主要原因是为了类似的目的重复使用相

我使用不同的参数多次从cron调用bash脚本,并将其输出重定向到不同的日志,大致如下所示:

* * * * * /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
是一个非标准实用程序。看见