如何在Bash脚本中引用重定向文件?

3
我想编写一个名为myscript的bash脚本,使得执行以下命令:
myscript > filename.txt
会返回输出被重定向到的文件名filename.txt。这个可行吗?

1
不,该脚本无法访问那些信息。 - Paul Tomblin
2个回答

1
使用 lsof:
outfile=$(lsof -p $$ | awk '/1w/{print $NF}')
echo $outfile

1

如果您正在运行Linux,请检查/proc/self/fd/1链接到哪里。

例如,脚本可以执行以下操作:

#!/bin/bash
readlink /proc/self/fd/1

然后运行它:

$ ./myscript > filename.txt
$ cat filename.txt
/tmp/filename.txt

请注意,如果您想将输出文件的值保存到变量或其他地方,您不能使用/proc/self,因为它在子shell中会有所不同,但您仍然可以使用$$
outputfile=$(readlink /proc/$$/fd/1)

我猜这种方法会比lsof方法快一点,因为它不需要生成awk。 - jeffvenuti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接