Untuk mencegah file yang ada ditimpa oleh pengalihan >
gunakan noclobber
opsi di bash
atau shell mirip POSIX (juga di (t)csh
dari mana fitur sebenarnya berasal, meskipun Anda melakukan set noclobber
bukannya set -o noclobber
/set -C
di sana). Kemudian, jika Anda perlu memaksa untuk mengganti file, gunakan >|
operator pengalihan (>!
di (t)csh
).
Contoh:
$ echo abc > file
$ set -o noclobber
$ echo xyz > file
bash: file: cannot overwrite existing file
$ echo xyz >| file
$ cat file
xyz
BTW, Anda dapat memeriksa pengaturan saat ini dengan set -o
:
$ set -o
...
monitor on
noclobber on
noexec off
...
Sayangnya saya curiga Anda harus menulis ulang. (Jika Anda memiliki cadangan, inilah saatnya untuk mengeluarkannya. Jika tidak, saya sangat menyarankan Anda menyiapkan sistem cadangan untuk masa mendatang. Banyak opsi tersedia, tetapi di luar topik untuk jawaban ini.)
Saya menemukan bahwa meletakkan executable di direktori terpisah, dan menambahkan direktori itu ke PATH
membantu. Dengan cara ini saya tidak perlu mereferensikan executable dengan jalur eksplisit. Direktori program pilihan saya untuk skrip pribadi (pribadi) adalah "$HOME"/bin
dan itu dapat ditambahkan ke jalur pencarian program dengan PATH="$HOME/bin:$PATH"
. Biasanya ini akan ditambahkan ke skrip startup shell .bash_profile
dan/atau .bashrc
.
Terakhir, tidak ada yang menghentikan Anda menghapus izin menulis untuk diri Anda sendiri di semua program yang dapat dijalankan:
touch some_executable.py
chmod a+x,a-w some_executable.py # chmod 555, if you prefer
ls -l some_executable.py
-r-xr-xr-x+ 1 roaima roaima 0 Jun 25 18:33 some_executable.py
echo "The hunting of the Snark" > ./some_executable.py
-bash: ./some_executable.py: Permission denied
Saya sangat menyarankan untuk memiliki skrip penting di bawah repo git , disinkronkan dari jarak jauh (platform yang dihosting sendiri akan melakukannya), seperti yang dikatakan komentar @ casey.
Dengan cara ini Anda terlindung dari kesalahan manusia yang buruk seperti mengembalikan file ke status kerja sebelumnya dan menjalankannya lagi.