GNU/Linux >> Linux Esercitazione >  >> Linux

Eseguire script Bash all'ingresso di una directory?

Qual è il modo migliore per eseguire uno script quando si entra in una directory?
Quando mi sposto in una nuova directory, vorrei che bash esegua lo script projectSettings.bash proprio come fa RVM.

Risposta accettata:

Puoi creare cd una funzione (e pop e pushd ), e fai in modo che rilevi se entri in quella particolare directory.

cd () { builtin cd "[email protected]" && chpwd; }
pushd () { builtin pushd "[email protected]" && chpwd; }
popd () { builtin popd "[email protected]" && chpwd; }
unset_all_project_settings () {
  # do whatever it takes to undo the effect of projectSettings.bash,
  # e.g. unset variables, remove PATH elements, etc.
}
chpwd () {
  case $PWD in
    /some/directory|/some/other/directory) . ./projectSettings.bash;;
    *) unset_all_project_settings;;
  esac
}

Non farlo in directory che non hai inserito nella whitelist, perché sarebbe molto facile per qualcuno indurti con l'inganno a eseguire codice arbitrario:inviarti un archivio, quindi decomprimilo, passa alla directory che ha creato e tu' Ora eseguiamo il codice dell'attaccante.

Non consiglio questo approccio, perché significa che lo script verrà eseguito anche se si accede a quella directory per qualche motivo non correlato al lavoro sul progetto. Suggerisco di avere una funzione specifica che cambia nella directory del progetto e genera lo script delle impostazioni.

myproj () {
  cd /some/directory && . ./projectSettings.bash
}

Linux
  1. Gestione degli errori negli script Bash

  2. Perché non posso usare Cd in uno script Bash??

  3. Esegue lo script bash dall'URL

  4. Esegui tutti gli script della shell nella cartella

  5. Bash non modifica più la directory

Come verificare se esiste un file o una directory in Bash

Come verificare se un file o una directory esiste in Bash

Scrivere commenti negli script Bash

Come eseguire tutti gli script in una directory in Linux

Come creare documenti con gli script Bash

È possibile avere una cronologia bash consapevole della directory