GNU/Linux >> Linux Esercitazione >  >> Linux

Accidentalmente utilizzato il reindirizzamento dell'output > invece di una pipe |

Per evitare che i file esistenti vengano sovrascritti dal reindirizzamento > usa il noclobber opzione in bash o qualsiasi shell simile a POSIX (anche in (t)csh dove l'elemento ha effettivamente avuto origine, anche se fai set noclobber invece di set -o noclobber /set -C là). Poi, se hai bisogno di forzare la sostituzione di un file, usa il >| operatore di reindirizzamento (>! in (t)csh ).

Esempio:

$ echo abc > file
$ set -o noclobber
$ echo xyz > file
bash: file: cannot overwrite existing file
$ echo xyz >| file
$ cat file
xyz

A proposito, puoi controllare le impostazioni correnti con set -o :

$ set -o
...
monitor         on
noclobber       on
noexec          off
...

Purtroppo sospetto che dovrai riscriverlo. (Se disponi di backup, questo è il momento di tirarli fuori. In caso contrario, ti consiglio vivamente di impostare un regime di backup per il futuro. Molte opzioni disponibili, ma fuori tema per questa risposta.)

Trovo che mettere gli eseguibili in una directory separata e aggiungere quella directory al PATH è utile. In questo modo non ho bisogno di fare riferimento agli eseguibili tramite percorso esplicito. La mia directory di programmi preferita per gli script personali (privati) è "$HOME"/bin e può essere aggiunto al percorso di ricerca del programma con PATH="$HOME/bin:$PATH" . Tipicamente questo verrebbe aggiunto agli script di avvio della shell .bash_profile e/o .bashrc .

Infine, non c'è nulla che ti impedisca di rimuovere i permessi di scrittura per te stesso su tutti i programmi eseguibili:

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

Consiglio vivamente di avere gli script importanti sotto un repo git , sincronizzato in remoto (andrà bene una piattaforma self-hosted di fantasia), come dice il commento di @ casey.

In questo modo sei protetto da gravi errori umani come ripristinare il file allo stato di lavoro precedente ed eseguirlo di nuovo.


Linux
  1. Leggi e scrivi dati da qualsiasi luogo con reindirizzamento nel terminale Linux

  2. Impara le nozioni di base su come funziona il reindirizzamento I/O (Input/Output) di Linux

  3. Come posso reindirizzare o reindirizzare l'output di curl -v?

  4. reindirizzamento dell'output al volo, visualizzando l'output del reindirizzamento del file mentre il programma è ancora in esecuzione

  5. diff per produrre solo i nomi dei file

Reindirizzamento input/output in Linux/Unix

Reindirizzamento e uscita del tubo?

Io reindirizzamento e il comando principale?

Output da salvare in un file con lo stesso nome del file di input?

Shell Scripting Part4 – Input, Output e Reindirizzamento

Salva l'output di un comando dal terminale Debian in un file