Bash
使用命令和選項進行輸入重定向
我正在嘗試編寫一個包含 2 個參數的腳本 - 程序名稱和可選標誌。
我正在嘗試對 input_file 執行程序命令並將輸出儲存在 output_file 中。
$input_file < $($program options) > output_file
我嘗試了各種語法組合來實現上述行為,但我遇到了錯誤,例如:不明確的重定向、i/o 錯誤等。
例子:
./execute cat -n
在程序內部,我想編寫程式碼,以便將 cat 應用於輸入文件
這些不起作用:
$(${1} ${2} names.txt) > test.out names.txt < $($1 $2) > test.out
您誤解了語法。首先,輸入重定向
<
在文件前面有符號,而不是在後面。操作的順序並不重要。所以,語法是:< inputfile command options > outputfile
或者
command options < inputfile > outputfile
(或其他排列)。
然後,您還有額外的
$
. 你真正需要做的是$program $options <$inputfile >$outputfile
您可以將
${program}
and${options}
替換為$1
and$2
。在這種形式下,您可以
#!/bin/bash <names.txt $1 $2 >test.out
並將其稱為
./execute cat -n
甚至./execute cat '-n -s'
如果您想要多個選項。在這種形式中,您可以有多個選項,但您必須將它們放在引號中(因為$2
)沒有被引用,空格將參數擴展回多個單詞。另一種(更好的)方法就是使用
#!/bin/bash <names.txt "$@" >test.out
現在,您可以將任意數量的參數傳遞到腳本中,您甚至可以在參數中包含帶引號的字元串,並且它們在傳播到腳本後會保持在一起。現在可以了:(
./execute cat -n - "bla bla.txt"
以前的形式會將文件名分成兩部分)。