Bash

從修改自身中排除 Bash 文件

  • November 20, 2018

我正在學習如何使腳本“萬無一失”。我有一些腳本可以修改目前文件夾中的文件,但它們也會修改腳本本身。我知道這一切都歸結為“查找”的“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 

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