UNIX shell脚本 - 保存输入文件名
问题描述:
比方说,我想运行一个shell脚本如下:UNIX shell脚本 - 保存输入文件名
./script.sh <in.txt> out.txt
我怎么能分析该文件标准输入的名称会被重定向到,即“in.txt “在这个例子中?
我知道,如果我有:
./script.sh in.txt out.txt
我可以使用下面的脚本文件,以获得“in.txt”
eval var1="$1"
但我无法弄清楚用于输入重定向。 谢谢!
答
首先,你不需要 “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)
只是为了澄清,鉴于外部重定向标准输入/输出,你想对应的文件?你想要一个Linux特定的解决方案吗? – Hasturkun 2013-03-24 10:46:24