因此,我需要编写一个 shell 脚本,它接受文件路径作为参数并在 shell 脚本中使用它。我知道我可以做类似的事情:
$ ./script filename
有了这个解决方案,我就可以在 shell 脚本中使用 $1
访问这个文件名字符串。
但是,我想知道它是否是可以改用输入重定向,这样我就可以使用它传递文件名:
$ ./script < filename
如果是这样,我将如何在 shell 脚本中访问此文件名?
我对 shell 脚本编码还很陌生,所以我不确定这是否可行。
最佳答案
您可以提取通过 <
传递的文件名通过列表/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-)
关于linux - 通过输入重定向 (<) 将参数传递给 Bash Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22008619/