UNIX Shell脚本-保存输入文件名

UNIX Shell脚本-保存输入文件名,unix,filenames,io-redirection,Unix,Filenames,Io Redirection,假设我想运行一个shell脚本,如下所示: ./script.sh < in.txt > out.txt 我可以在脚本文件中使用以下命令来获取“in.txt” 但我无法为输入重定向找到它。 谢谢 只要做: #/垃圾箱/垃圾箱 填充=1美元 输出文件=2美元 猫2美元 或者,如果您想获得真正的乐趣,您可以更改stdin和stdout: #/垃圾箱/垃圾箱 1$2 回声“测试” 首先,您不需要“评估”任何东西: var1="$1" 够了 第二:你不能,除非你对“/dev/stdin

假设我想运行一个shell脚本,如下所示:

./script.sh < in.txt > out.txt
我可以在脚本文件中使用以下命令来获取“in.txt”

但我无法为输入重定向找到它。 谢谢

只要做:

#/垃圾箱/垃圾箱
填充=1美元
输出文件=2美元
猫<$1
回声>2美元
或者,如果您想获得真正的乐趣,您可以更改stdin和stdout:

#/垃圾箱/垃圾箱
1$2
回声“测试”
首先,您不需要“评估”任何东西:

var1="$1"
够了


第二:你不能,除非你对“/dev/stdin”、“/proc/self/fd/0”或你的操作系统提供的任何东西感到满意;请参阅例如--plan9需要添加fd2path(),因为(惊喜,惊喜)它以前不存在。

这不是一个可移植的解决方案,但它在某些系统上有效(当输入流是常规文件时):

#!/bin/sh
echo Input file: $( readlink -f /proc/$$/fd/0 )

只是澄清一下,给定一个外部重定向的stdin/stdout,您想要相应的文件吗?您想要一个特定于Linux的解决方案吗?您的第一个和第二个问题分别涉及问题的第二部分和第一部分:D,但您的观点是有效的。并非所有文件都有名称。想想管道I/O:
command1…|命令2…
。管道实际上没有名称(除了
/proc
中的条目)。
var1="$1"
#!/bin/sh
echo Input file: $( readlink -f /proc/$$/fd/0 )