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

时间:2013-03-24 10:23:03

标签: unix filenames io-redirection

假设我想按如下方式运行shell脚本:

./script.sh < in.txt > out.txt

如何解析重定向到stdin的文件的名称,即此示例中的“in.txt”?

我知道如果我有:

./script.sh in.txt out.txt

我可以在脚本文件中使用以下内容来获取“in.txt”

eval var1="$1"

但我无法弄清楚输入重定向。 谢谢!

3 个答案:

答案 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"