2013-03-24 38 views
1

比方說,我想運行一個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

回答

2

首先,你不需要 「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

0

只要做到:

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

cat < $1 
echo > $2 

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

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

這不是一個便攜式解決方案,但它工作(當輸入流是一個普通文件),在某些系統上:

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