Bash

使用命令和選項進行輸入重定向

  • January 25, 2016

我正在嘗試編寫一個包含 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}替換為$1and $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"以前的形式會將文件名分成兩部分)。

引用自:https://unix.stackexchange.com/questions/257463