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

问题描述:

比方说,我想运行一个shell脚本如下:UNIX shell脚本 - 保存输入文件名

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

我怎么能分析该文件标准输入的名称会被重定向到,即“in.txt “在这个例子中?

我知道,如果我有:

./script.sh in.txt out.txt 

我可以使用下面的脚本文件,以获得“in.txt”

eval var1="$1" 

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

+0

只是为了澄清,鉴于外部重定向标准输入/输出,你想对应的文件?你想要一个Linux特定的解决方案吗? – Hasturkun 2013-03-24 10:46:24

首先,你不需要 “EVAL” 任何东西:

var1="$1" 

就够了。第二:除非你对“/ dev/stdin”,“/ proc/self/fd/0”或者你的操作系统提供的任何东西感到满意,否则你不能这样做。见http://plan9.bell-labs.com/sys/doc/lexnames.html - plan9需要 fd2path(),因为(惊喜,惊喜)它以前不存在。

+0

你的第一个和第二个问题分别处理问题的第二部分和第一部分:D但是你的观点是有效的。并非所有文件都有名称。考虑管道I/O:'command1 ... | command2 ...'。管道中没有真正的名称('/ proc'中的条目除外)。 – 2013-03-24 15:33:51

只要做到:

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

cat < $1 
echo > $2 

或者,如果你想获得真正看中的,你可以改变stdin和stdout:

#!/bin/sh 
1<$1 
1>$2 
echo "test" 

这不是一个便携式解决方案,但它工作(当输入流是一个普通文件),在某些系统上:

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