Aby se předešlo přepsání existujících souborů přesměrováním >
použijte noclobber
možnost v bash
nebo jakýkoli shell podobný POSIXu (také v (t)csh
kde tato funkce skutečně pochází, i když set noclobber
místo set -o noclobber
/set -C
tam). Pak, pokud potřebujete vynutit nahrazení souboru, použijte >|
operátor přesměrování (>!
v (t)csh
).
Příklad:
$ echo abc > file
$ set -o noclobber
$ echo xyz > file
bash: file: cannot overwrite existing file
$ echo xyz >| file
$ cat file
xyz
BTW, aktuální nastavení můžete zkontrolovat pomocí set -o
:
$ set -o
...
monitor on
noclobber on
noexec off
...
Bohužel mám podezření, že to budeš muset přepsat. (Pokud máte zálohy, je čas je dostat ven. Pokud ne, důrazně bych vám doporučil nastavit režim zálohování pro budoucnost. K dispozici je spousta možností, ale pro tuto odpověď je to mimo téma.)
Zjistil jsem, že umístění spustitelných souborů do samostatného adresáře a přidání tohoto adresáře do PATH
je užitečné. Tímto způsobem nemusím odkazovat na spustitelné soubory explicitní cestou. Můj preferovaný adresář programů pro osobní (soukromé) skripty je "$HOME"/bin
a lze jej přidat do cesty pro vyhledávání programu pomocí PATH="$HOME/bin:$PATH"
. Typicky by to bylo přidáno do spouštěcích skriptů shellu .bash_profile
a/nebo .bashrc
.
Konečně vám nic nebrání v odebrání oprávnění k zápisu pro všechny spustitelné programy:
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
Důrazně doporučuji mít důležité skripty pod git repo , synchronizované na dálku (vyhovující platforma s vlastním hostitelem bude stačit), jak říká komentář @casey.
Tímto způsobem jste chráněni před špatnými lidskými chybami, jako je vrácení souboru do předchozího pracovního stavu a jeho opětovné spuštění.