Bash
從修改自身中排除 Bash 文件
我正在學習如何使腳本“萬無一失”。我有一些腳本可以修改目前文件夾中的文件,但它們也會修改腳本本身。我知道這一切都歸結為“查找”的“for”循環,我做錯了。
for f in $(find . -type f | grep -v $0)
我的目標是包含它可以從目前目錄中找到的所有文件及其子目錄,但不包括已執行的腳本本身。它與 grep -v 一起使用,但現在它排除了包含腳本名稱的每個文件(如子文件夾中的腳本副本)。任何人都知道如何使其僅適用於已執行的腳本?我必須假設有人可能會在某個時候更改名稱,因此手動排除它是不可能的。
方法的例子
find . -type f ! -path $0
。請注意腳本如何僅報告**“d”**目錄中foo.sh
的內容。不在目前目錄中。foo.sh
$ find . -print . ./a ./b ./c ./foo.sh ./d ./d/foo.sh $ cat foo.sh #!/bin/bash for f in $(find . -type f ! -path $0); do echo $f done $ ./foo.sh ./a ./b ./c ./d/foo.sh $
或者,嘗試
for f in $(find . -type f | grep -v "^\./foo\.sh$"); do
出什麼問題了:
for f in $(find . -type f); do case $f in */$0|$0) continue ;; *) echo 'Do something' ;; esac fi done