您可以通过列出/proc/<pid>/fd
目录提取与<
传递文件的名称,具体如下:
ls -ltr /proc/$$/fd
然后
$ cat myscript.sh
ls -ltr /proc/$$/fd
$ ./myscript.sh < hello
total 0
lr-x------ 1 u g 64 Feb 25 08:42 255 -> /tmp/myscript.sh
lrwx------ 1 u g 64 Feb 25 08:42 2 -> /dev/pts/0
lrwx------ 1 u g 64 Feb 25 08:42 1 -> /dev/pts/0
lr-x------ 1 u g 64 Feb 25 08:42 0 -> /tmp/hello
我无法猜测这是否是有用
并且在输入通过管道时不起作用
$ cat hello| ./myscript.sh
total 0
lr-x------ 1 u p 64 Feb 25 08:50 255 -> /tmp/myscript.sh
lrwx------ 1 u p 64 Feb 25 08:50 2 -> /dev/pts/0
lrwx------ 1 u p 64 Feb 25 08:50 1 -> /dev/pts/0
lr-x------ 1 u p 64 Feb 25 08:50 0 -> pipe:[82796]
或者,你可以使用lsof的和一个小线处理,以获取价值
filename=$(/usr/sbin/lsof -p $$| grep " 0u"| cut -c 60-)
不错的一个,没有想到...不知道这是否便携,但整齐的把戏都是一样的...来想一想,同样可以实现解析'lsof -p $$'的输出' 。 – isedev
和'command | 。/ script'会是一个有趣的边缘情况... – isedev
@isedev谢谢你,'lsof -p $$'似乎更具可移植性。使用lsof来跟踪管道也是可能的,但它似乎与基本情况一样没用 –