Bashファイルが独自に変更されないように除外

Bashファイルが独自に変更されないように除外

私は私のスクリプトを「完璧に」する方法を学んでいます。現在のフォルダのファイルを変更するいくつかのスクリプトがありますが、スクリプト自体も変更します。私はこれらすべてが「for」ループと私が理解できない「検索」に帰結することを知っています。

for f in $(find . -type f | grep -v $0)

私の目標は、現在のディレクトリとサブディレクトリにあるすべてのファイルを含むが、実行されたスクリプト自体を除外することです。 grep -vで動作しますが、今ではスクリプト名を含むすべてのファイル(サブフォルダのスクリプトコピーなど)を除外します。実行されたスクリプトでのみ機能させる方法を知っている人はいますか?誰かがある時点で名前を変更できると仮定する必要があるため、手動で除外することはできません。

ベストアンサー1

この方法の例find . -type f ! -path $0。スクリプトのfoo.sh報告方法に注意してください。「D」目次。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

おすすめ記事