假设我想运行一个 shell 脚本,如下所示:
./script.sh < in.txt > out.txt
如何解析标准输入重定向到的文件的名称,即本例中的“in.txt”?
我知道,如果我有:
./script.sh in.txt out.txt
我可以在脚本文件中使用以下内容来获取“in.txt”
eval var1="$1"
但我无法弄清楚输入重定向。谢谢!
假设我想运行一个 shell 脚本,如下所示:
./script.sh < in.txt > out.txt
如何解析标准输入重定向到的文件的名称,即本例中的“in.txt”?
我知道,如果我有:
./script.sh in.txt out.txt
我可以在脚本文件中使用以下内容来获取“in.txt”
eval var1="$1"
但我无法弄清楚输入重定向。谢谢!
首先,您不需要“评估”任何东西:
var1="$1"
足够的。
第二:你不能,除非你对“/dev/stdin”、“/proc/self/fd/0”或你的操作系统提供的任何东西感到满意;参见例如http://plan9.bell-labs.com/sys/doc/lexnames.html - plan9 需要添加fd2path(),因为(惊喜,惊喜)它以前不存在。
这不是一个可移植的解决方案,但它适用于某些系统(当输入流是常规文件时):
#!/bin/sh
echo Input file: $( readlink -f /proc/$$/fd/0 )
做就是了:
#!/bin/sh
infile=$1
outfile=$2
cat < $1
echo > $2
或者如果你想变得更花哨,你可以改变标准输入和标准输出:
#!/bin/sh
1<$1
1>$2
echo "test"