1

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

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

如何解析标准输入重定向到的文件的名称,即本例中的“in.txt”?

我知道,如果我有:

./script.sh in.txt out.txt

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

eval var1="$1"

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

4

3 回答 3

2

首先,您不需要“评估”任何东西:

var1="$1"

足够的。

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

于 2013-03-24T14:13:08.860 回答
1

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

#!/bin/sh
echo Input file: $( readlink -f /proc/$$/fd/0 )
于 2013-03-24T20:18:48.257 回答
0

做就是了:

#!/bin/sh
infile=$1
outfile=$2

cat < $1
echo > $2

或者如果你想变得更花哨,你可以改变标准输入和标准输出:

#!/bin/sh
1<$1
1>$2
echo "test"
于 2013-03-24T10:32:53.673 回答