linux - 通过输入重定向 (<) 将参数传递给 Bash Shell 脚本

标签 linux bash shell

因此,我需要编写一个 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/

相关文章:

linux - 如何在一个制表符分隔文件中复制行并替换多个字符串

linux - 如何为 SSH_ASKPASS 启动 linux 子 shell 以在 linux 中工作

linux - 如何设置路径以在终端中运行 Gitea 命令而不考虑目录?

linux - BASH 将带有变量的命令输出存储到另一个变量中

c - Shell 脚本 -(编译 C)

node.js - 在 Emacs nodejs 模式下得到垃圾提示

linux - 使用带有 head 的环境变量

bash - Docker-运行容器时执行bash

bash - 在 Unix 中,如何删除当前目录及其下的所有内容?

Bash 将值重新分配给变量 "command not found"