2017-05-09 69 views
0

我有不同的參數和重定向他們的輸出到不同的日誌的cron多次叫約這樣的bash腳本:如何在bash腳本中檢測stdout和stderr日誌去哪裏?

* * * * * /home/bob/bin/somescript.sh someparameters >> /home/bob/log/param1.log 2>&1 

我需要一些變量值「我的劇本得到的/ home /鮑勃/日誌/param1.log「。它也可以爲日誌文件名而不是「param1」計算日期。截至目前的主要原因是重複使用相同的腳本用於類似的目的,並能夠通過監視的文件夾通知用戶他應該在哪裏查找更多信息 - 在某個警告文件中給他一個日誌文件名。

如何檢測輸出(& 1或同時輸入了& 1和& 2)?

回答

2

如果您運行的是Linux,你可以閱讀從proc文件系統中的信息。假設你在stdout.sh.

#! /bin/bash 
readlink -f /proc/$$/fd/1 >&2 

有以下程序交互這說明你的終端。

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

並且通過重定向它顯示目的地。

$ ./stdout.sh > nix 
/home/ceving/nix 
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} 
+0

請注意'lsof'是一個非標準的工具。請參閱https://unix.stackexchange.com/questions/18614/alternatives-for-lsof-command – cdarke

相關問題