bash中存在一些特殊問題。我想編寫一個腳本,該腳本採用文件名的前綴,並刪除以該前綴開頭並以某些給定後綴結尾的所有文件。要做到這一點,我有下面的代碼行:rm -f不會處理bash腳本中的所有參數
#!/bin/bash
if [ $# -lt 1 ]; then
echo "Please provide an argument";
exit 1
fi
# Ending dot already included in $1
rm -f $1"aux" $1"bbl" $1"blg" $1"synctex.gz" $1"log"
# But even if you call it wrong...
rm -f $1".aux" $1".bbl" $1".blg" $1".synctex.gz" $1 ".log"
exit 0
不幸的是,當我把我的腳本(這被稱爲cleanlatex
),按預期:
cmd$ cleanlatex lpa_aaai.
只有.aux文件被刪除。顯然,rm -f
不會將其應用程序擴展到所有參數,如果我明確運行rm -f lpa_aaai.aux lpa_aaai.bbl ...
,則會發生這種情況。我在這裏做錯了什麼?
編輯:要回答@伊坦的問題,這是我看到的時候我添加這些命令:
+ '[' 1 -lt 1 ']'
+ rm -v lpa_aaai.aux lpa_aaai.bbl lpa_aaai.blg lpa_aaai.synctex.gz lpa_aaai.log
removed ‘lpa_aaai.aux’
removed ‘lpa_aaai.bbl’
removed ‘lpa_aaai.blg’
removed ‘lpa_aaai.synctex.gz’
removed ‘lpa_aaai.log’
+ rm -v lpa_aaai..aux lpa_aaai..bbl lpa_aaai..blg lpa_aaai..synctex.gz lpa_aaai. .log
rm: cannot remove ‘lpa_aaai..aux’: No such file or directory
rm: cannot remove ‘lpa_aaai..bbl’: No such file or directory
rm: cannot remove ‘lpa_aaai..blg’: No such file or directory
rm: cannot remove ‘lpa_aaai..synctex.gz’: No such file or directory
rm: cannot remove ‘lpa_aaai.’: No such file or directory
rm: cannot remove ‘.log’: No such file or directory
第二組,由cannot remove
郵件,不關心我,我只有這些刪除無論如何作爲失敗保險。這正是我所需要的。謝謝。
試試這個:'rm -f $ 1 {。,} {aux,bbl,blg,log,synctex.gz}'。 –
它在我的機器上沒有任何問題,在輸入中使用或不使用'.'。 –
如果您正在從當前目錄運行您的腳本,請在'.sh'文件之前使用'。/',或使用'/ tmp/foo/myscript.sh'作爲'絕對路徑'。 –