Shell

如果命令成功,則通過管道輸出命令

  • June 1, 2016
INPUT_FILE=`ls -rt $MY_DIR/FILE.*.xml | head -1 | xargs basename`

我只想head -1在第一個命令成功的情況下執行第二個命令()。如何改進此命令?

試試這個:

INPUT_FILE=`ls -rt "$MY_DIR"/FILE.*.xml | head -1 | xargs -r basename`

傳遞標誌xargs-r使其僅在從標準輸入 ( ) 中basename讀取至少一項時執行。head -1

head -1將執行,但您不會看到或擷取它的任何輸出。

此外,如果您不希望使用者看到任何錯誤輸出ls,您可以將ls的 stderr 流重定向到/dev/null.

INPUT_FILE=`ls -rt "$MY_DIR"/FILE.*.xml 2> /dev/null | head -1 | xargs -r basename`

另請注意,我在$MY_DIR. 這樣,如果$MY_DIR包含空格,該命令將不會失敗。

如果您使用的是 bash 等現代 shell,則應使用$( )擷取 shell 而不是反引號。您還應該考慮更改變數的樣式。您通常應該避免在腳本中使用全大寫的變數名。這種風格通常保留給保留變數和環境變數。

input_file=$(ls -rt "$my_dir"/FILE.*.xml 2> /dev/null | head -1 | xargs -r basename)

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