好的,所以我正在嘗試編寫一個簡單的shell腳本來檢查更新或只更新所有包,包括自制軟件本身。我試圖將可執行文件名稱回顯到一個txt文件中,並在最後輸入txt文件。問題是,在我的腳本中,無論我做什麼,它總是在它創建的文本文件中包含文本文件的名稱。我該如何跳過文本文件,或者刪除包含pkg.txt
的整行?請記住,它不會像刪除最後一行那樣簡單,因爲軟件包是按字母順序列出的,如果我安裝了任何以大於p的字母開頭的軟件包,它將刪除該行。如何在迭代目錄時跳過txt文件?
這是我的代碼到目前爲止。
for FILE in $HOME/.brew/bin/* ; do
TRIM=$(basename $FILE)
if [ "$FILE" != "*.txt" ] ; then
echo "brew upgrade \c" >> pkg.txt ; echo $TRIM >> pkg.txt
fi
done
不知道它的問題,但我目前在iTerm2運行的zsh。
是您的*腳本*要使用bash或zsh中運行? (對於bash來說,很多語法都是不正確的,http://shellcheck.net/會捕獲這些語法)。也就是說,第一個開始行是以'#!/ bin/bash','#!/ usr/bin/env zsh'還是別的嗎? ('#!/ bin/sh'表示只保證POSIX sh基線)。 –
...如果解釋器本身不是bash,那麼'bash'標籤不應該用在StackOverflow問題中。 –
順便說一下,把'>> pkg.txt放在'done'上會更有效率,因此在整個循環中只打開一次輸出文件,而不是每次打開文件都要重新打開文件一行一行,並在寫完一行後關閉它。 –