push / pop directory corrente?


66

Con bash c'è un modo per spingere e far apparire l'attuale directory di lavoro? Ho provato a scrivere bash;cd dir; ./dostuff;exit;ma la directory corrente è ora dir.

linux  bash 

Risposte:


91

C'è pushdepopd

Bash manterrà una cronologia delle directory che visiti, devi solo chiedere. Bash memorizza la cronologia in uno stack e utilizza i comandi pushd e popd per gestire lo stack.

Altro da leggere

Esempio:

$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me

1
Estratto dal linkpushd Saves the current directory on the top of the directory stack and then cd to dir. With no arguments, pushd exchanges the top two directories.
Master Chief

31

La chiamata bashavvia una nuova subshell, che ha il suo input; nessuno degli altri comandi verrà eseguito fino alla sua uscita. Circondando i comandi da eseguire con le parentesi verrà avviata anche una nuova subshell, ma eseguirà i comandi al suo interno.

( cd dir ; ./dostuff )

1
Brillante! Non è necessario premere / pop quando si intende semplicemente eseguire un comando in una directory diversa (ad es. Aggiornare una dipendenza), quindi tornare a quella corrente.
Dan Dascalescu il

12

Se non hai bisogno di più livelli di cronologia delle directory, puoi anche fare:

cd foo
# do your stuff in foo
cd -

Rispetto a pushd/ popd, questo ha lo svantaggio che se cd foofallisce, si finisce nella directory sbagliata con cd -.

(Probabilmente cd -è più utile script esterni. "Torniamo dove ero appena.")


4

Uso l'alias per tenere traccia delle modifiche alla mia directory in modo da "cd" da qualche parte posso solo tornare a dove stavo usando "cd.", Oppure tornare indietro due usando "cd ..", ecc .;

alias pushdd="pushd \$PWD > /dev/null"
alias cd='pushdd;cd'
alias ssh='ssh -A'
alias soc='source ~/.bashrc'
#below to go back to a previous directory (or more)
alias popdd='popd >/dev/null'
alias cd.='popdd'
alias cd..='popdd;popdd'
alias cd...='popdd;popdd;popdd'
alias cd....='popdd;popdd;popdd;popdd'
#below to remove directories from the stack only (do not 'cd' anywhere)
alias .cd='popd -n +0'
alias ..cd='popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0'

1
Puoi spiegarci più in dettaglio cosa fa questo codice?
bwDraco,

È intelligente. Ho alias intorno al mio pushd e popd per fare alcune cose che mi piacciono. Uso sempre lo stack delle directory. Odio guardare persone cd da qualche parte e poi scorrere indietro alla ricerca della directory precedente da tagliare e incollare. Non riesco a fare gran parte del mio lavoro nella mia directory home a causa delle quote, quindi devo usare lo storage in pool sulla rete.
Michael Mathews,

1
L'alias è ..cdabbastanza robusto? sembra che rimuova solo gli ultimi 10 oggetti dalla pila.
reynoldsnlp,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.