我有一個腳本,我從cron調用並將其輸出重定向到一個文件中。在bash中獲取重定向位置
Crontab中充滿了另一個腳本,它也會生成stdout重定向的位置,它可以根據很多因素進行更改。
我想知道,在我的腳本中,什麼文件stdout被重定向。
有沒有辦法做到這一點,沒有任何配置文件或將文件位置作爲參數傳遞給腳本?
感謝
我有一個腳本,我從cron調用並將其輸出重定向到一個文件中。在bash中獲取重定向位置
Crontab中充滿了另一個腳本,它也會生成stdout重定向的位置,它可以根據很多因素進行更改。
我想知道,在我的腳本中,什麼文件stdout被重定向。
有沒有辦法做到這一點,沒有任何配置文件或將文件位置作爲參數傳遞給腳本?
感謝
readlink -f /proc/$$/fd/1
$$
...行書
/proc/[pid]/fd/1
的PID ... 1是標準輸出的文件描述符,它表現爲一個符號鏈接到實際文件
從您的shell腳本中,您可以使用:
/proc/$$/fd/1
這是你的shell進程的標準輸出($$
)。
你可以試試這個:
#!/bin/bash
readlink /proc/$$/fd/1
如果調用此script.sh,運行script.sh > /tmp/f.out
當你讀文件/tmp/f.out
的內容,這將是:
/tmp/f.out
你可以使用lsof
;可能會有更簡單的方法將輸出限制爲文件名。
lsof -d 1 -a -p $$ -Fn | awk '/^n/ { print substr($1, 2); }'
如果您的操作系統沒有/proc
文件系統,這非常有用。