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

时间:2017-05-09 07:11:59

标签: 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"计算日期。目前的主要原因是为了类似目的重用相同的脚本,并且能够通过受监视的文件夹通知用户他应该在哪里查找更多信息 - 在一些警告文件中给他一个日志文件名。

如何检测输出(& 1或两者& 1和& 2)的日志?

2 个答案:

答案 0 :(得分:2)

如果您运行的是Linux,则可以从proc文件系统中读取信息。假设您在stdout.sh.

中有以下程序
#! /bin/bash
readlink -f /proc/$$/fd/1 >&2

以交互方式显示您的终端。

$ ./stdout.sh 
/dev/pts/0

通过重定向,它显示目的地。

$ ./stdout.sh > nix
/home/ceving/nix

答案 1 :(得分:0)

在运行时/ 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}