次のコマンドを発行するようなbashスクリプトmyscriptを記述したいと思います。
myscript> filename.txt
出力がリダイレクトされるファイル名の名前filename.txtを返します。これは可能ですか?
使用lsof
:
outfile=$(lsof -p $$ | awk '/1w/{print $NF}')
echo $outfile
Linuxで実行している場合は、/proc/self/fd/1
リンク先を確認してください。
たとえば、スクリプトは次のことを実行できます。
#!/bin/bash
readlink /proc/self/fd/1
そしてそれを実行します:
$ ./myscript > filename.txt
$ cat filename.txt
/tmp/filename.txt
/proc/self
出力ファイルの値を変数などに保存する場合は、サブシェルで異なるため使用できませんが、使用することはできます$$
。
outputfile=$(readlink /proc/$$/fd/1)