我想编写一个 bash 脚本 myscript 以便发出以下命令:
我的脚本 > 文件名.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
因为它在 subshell 中会有所不同,但您仍然可以使用$$
:
outputfile=$(readlink /proc/$$/fd/1)