所以,我需要编写一个shell脚本,它接受一个文件路径作为参数,并在shell脚本中使用它.我知道我可以这样做:
$ ./script filename
Run Code Online (Sandbox Code Playgroud)
使用此解决方案,这将使我能够$1在shell脚本中使用此文件名字符串.
但是,我想知道是否可以使用输入重定向,所以我可以使用它传递文件名:
$ ./script < filename
Run Code Online (Sandbox Code Playgroud)
如果是这样,我将如何在shell脚本中访问此文件名?
我是shell脚本编码的新手,所以我不确定这是否可行.
您可以<通过列表/proc/<pid>/fd目录提取传递的文件名,如下所示:
ls -ltr /proc/$$/fd
Run Code Online (Sandbox Code Playgroud)
然后
$ 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
Run Code Online (Sandbox Code Playgroud)
我猜不出这是否有用
输入通过管道传递时不起作用
$ 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]
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用lsof和一点线处理来提取值
filename=$(/usr/sbin/lsof -p $$| grep " 0u"| cut -c 60-)
Run Code Online (Sandbox Code Playgroud)