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