Shell
如果命令成功,則通過管道輸出命令
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)