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.