2014-09-29 3 views
1

У меня есть сценарий, который я вызываю из cron и перенаправляю его вывод в файл.Получить местоположение перенаправления в bash

Crontab заполнен другим сценарием, который также создает местоположение перенаправления stdout, которое может меняться в зависимости от многих факторов.

Я хотел бы знать, в моем сценарии, о том, какой файл stdout перенаправлен.

Есть ли способ выполнить это без каких-либо конфигурационных файлов или передать местоположение файла в качестве аргумента скрипту?

Благодаря

ответ

0

readlink -f /proc/$$/fd/1

$$ ... PID бегущего сценария

/proc/[pid]/fd/1 ... 1 файл описатель стандартного вывода, он представлен в виде символической ссылки на фактический файл

0

С вашей оболочки вы можете использовать:

/proc/$$/fd/1 

который является эталоном вашего процесса оболочки ($$).

Вы можете попробовать это:

#!/bin/bash 

readlink /proc/$$/fd/1 

Если вы называете эту script.sh, запустите script.sh > /tmp/f.out Когда вы читаете содержимое файла /tmp/f.out это будет:

/tmp/f.out 
1

Вы можете использовать lsof; может быть более простой способ ограничить вывод только именем файла.

lsof -d 1 -a -p $$ -Fn | awk '/^n/ { print substr($1, 2); }' 

Это полезно, если ваша операционная система не имеет /proc файловую систему.

Смежные вопросы