bashはスクリプトの実行中にフォルダを削除します

bashはスクリプトの実行中にフォルダを削除します

フォルダ内でスクリプトが実行されています。コマンドが失敗した場合は、スクリプトを含むフォルダを削除したいと思います。それは可能ですか?

編集:意見に基づいて私が試したことを思い出しました。

答え1

誰かがOPの提案を試してみるのを心配して答えます...

重要な警告:質問に表示されるスクリプトは指定されたディレクトリを削除しますpwd。これはスクリプトがあるディレクトリではありませんが、スクリプトの起動時にユーザーが存在するディレクトリ

誰かがこれを行うと(**これを試してはいけません**)、cd ; /path/to/thatscriptユーザーのホームディレクトリ全体(「cd」がホームディレクトリに返されるため)とその下のすべてのエントリが削除されます。 ...

(これはルートのhomedirが "/"であるいくつかのオペレーティングシステムでは特に悪いです...)。

代わりに、スクリプトで次のことを行う必要があります。

mydir="$(cd -P "$(dirname "$0");pwd)"     
      #retrieve the script's absolute path, 
      #even if the script was called via ../relative/path/to/script
echo "the script '$0' is in: ${mydir} "
...
# and then (if you really want this.... but I think it's a bad idea!)
# rm -rf "${mydir:-/tmp/__UNDEFINED__}"  #deletes ${mydir}, if defined
# once you're sure it is correctly reflecting the real script's directory.

答え2

そうそうできます。

次のことが起こります。

[root@server ~]# mkdir new&&cd new
[root@server new]# echo -e "#! /bin/bash\nrm -rf" >remove.sh
[root@server new]#猫を削除.sh
#!/bin/bash
rm -rf ~/新規
[ルート@サーバー鳥]#ls
削除.sh
[root@server new]# bash 削除.sh
[ルート@サーバー新しい]#ls

(ここは空で、すべてのファイルとディレクトリは削除されますが、ディレクトリを変更する前はまだこの「新しい」フォルダにあります。)
[ルート@サーバー新しい]#CD..
[root@server ~]# ls 新しい
ls:新しいエントリにアクセスできません:そのファイルまたはディレクトリがありません

関連情報