Domanda

Ho usato 'cambiare directory' nel mio script di shell (bash)

#!/bin/bash
alias mycd='cd some_place'
mycd
pwd

pwd stampe some_place correttamente, ma dopo che lo script finito il mio directory di lavoro corrente non cambia.

E 'possibile cambiare il mio percorso da copione?

È stato utile?

Soluzione

È necessario procurarsi il file come:

. myfile.sh

o

source myfile.sh

Senza sourcing i cambiamenti che accadrà nel sub-shell e non nel guscio madre che invoca lo script. Ma quando si fonte un file le righe nel file vengono eseguiti come se fossero digitati nella riga di comando.

Altri suggerimenti

Lo script viene eseguito in una subshell separata. Che subshell cambia directory, non la shell si esegue in una soluzione possibile è quella di source lo script, invece di eseguirlo:.

# Bash
source yourscript.sh
# or POSIX sh
. yourscript.sh

Mentre sourcing dello script che si desidera eseguire è una soluzione, è necessario essere consapevoli che questo script quindi possibile modificare direttamente l'ambiente della shell corrente. Inoltre non è possibile passare più argomenti.

Un altro modo per farlo, è quello di implementare lo script come una funzione in bash.

function cdbm() {
    cd whereever_you_want_to_go
     echo arguments to the functions were $1, $2, ...
}

Questa tecnica viene utilizzata per autojump: http://github.com/joelthelion/autojump/wiki di fornire con l'apprendimento dei segnalibri di directory di shell.

Si può ottenere di sourcing. Sourcing è fondamentalmente eseguire lo script nella stessa shell che normale esecuzione (sh test.sh o ./test.sh) creerà sub shell ed eseguire lo script lì.

test.sh

cd development/
ls
# Do whatever you want.

Esegui test.sh da

source test.sh

. è più breve notazione per source. Così si può anche fare da

. test.sh

Questo eseguirà lo script e cambiare la directory di shell corrente per development/.

ogni volta che si esegue uno script sul vostro shell di login, un nuovo sottoprocesso viene generato e l'esecuzione dello script è fatto in un subshell.Once al completamento dello script, le uscite subshell e si ritorna alla shell.Hence login ogni volta che si fa un cd tramite uno script, la directory viene modificata nel percorso specificato dal cd, ma dalle finiture di script volta che torni alla tua shell di login nella directory di lavoro dal punto in cui è stato avviato lo script.

Il modo per superare questo è l'uso,

source yourscript.sh

quale fonte fa è esegue lo script come TCL copione, cioè ha lo stesso effetto di quando si digitato ogni riga sulla riga di comando della shell di login ed eseguito da lì. Così, in questo modo, quando le finiture script dopo cd, rimane in quella directory.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top