GNU/Linux >> Znalost Linux >  >> Linux

Náhodně bylo použito přesměrování výstupu > místo roury |

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í.


Linux
  1. Jak připojit výstup do souboru?

  2. diff pro výstup pouze názvů souborů

  3. Jak přesměrovat výstup system() do souboru?

  1. Naučte se základy toho, jak funguje přesměrování I/O (vstup/výstup) v systému Linux

  2. Účel použití Fifo vs dočasný soubor nebo potrubí?

  3. Přesměrování a výstup potrubí?

  1. Přesměrovat na stejný soubor jako zdrojový soubor zpracovaný příkazem?

  2. Uložit veškerý výstup z terminálu do souboru?

  3. Vysvětlení adresáře /etc/sysconfig