當用戶運行:
./script_name <input_file
...這是相當於正是,如果他們做了以下內容:從input_file
(exec <input_file; exec ./script_name)
...第一重定向標準輸入,然後調用腳本名爲./script_name
沒有任何參數。
您可以使用操作系統特定的接口來獲取與句柄關聯的文件名(如果有的話),但使用其中一種會使您的腳本只能在操作系統上運行,接口;這不值得。
# very, very linux-specific, won't work for "cat foo | ./yourscript", generally evil
if filename=$(readlink /proc/self/fd/0) && [[ -e $filename ]]; then
set -- "[email protected]" "$filename" # append filename to the end of the argument list
fi
如果你想在給出的參數,以避免提示輸入,並有這樣的說法的文件名,然後不採取它在標準輸入,但作爲一個參數,並做腳本內重定向自己:
#!/bin/bash
if [[ $1 ]]; then
exec <"$1" # this redirects your stdin to come from the file
fi
# ...put other logic here...
...並讓用戶調用你的腳本:
./script_name input_file
正如./yourscript <filename
運行yourscript
與filename
它的標準輸入的內容,腳本用./yourscript filename
它調用exec <"$1"
執行該命令後,將具有filename
它的標準輸入的內容調用。
'./script_name input_file',然後'echo $ 1'。 – bishop
我必須從我的輸入文件中讀取所有行。它具有所有的用戶輸入。如果我不使用該操作員,它會提示用戶輸入。 – Rock26
顯示你的腳本,或等效的例子,所以我們可以看到它從標準輸入 – chepner