Navigazione veloce tra directory: pushd, popd e dirs: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
(+ reverse pushd)
(reverse pushd script vers. 0.0.0.0.2)
Riga 423: Riga 423:


== Directory alla base dello stack ==
== Directory alla base dello stack ==
Un caso non tanto raro è quello di avere una lista fissa di directory tra cui muoverci e di aver memorizzato i rispettivi indici sullo stack senza far ricorso al comando <code>dirs</code>; cosa succede, però, se capita di doversi spostare, magari temporaneamente, tra un certo numero di directory diverse?  
Un caso non tanto raro è quello di avere una lista fissa di directory tra cui muoverci e di aver memorizzato mentalmente i rispettivi indici sullo stack senza far ricorso al comando <code>dirs</code>; cosa succede, però, se capita di doversi spostare, magari temporaneamente, tra un certo numero di directory diverse?  
Succede qualcosa di abbastanza fastidioso: l'inserimento con <code>pushd</code> delle nuove directory in cima allo stack modifica l'ordine delle directory salvate; questo fa perdere il vantaggio di ricordare l'indice consueto rallentando, quindi, il lavoro.  
Succede qualcosa di abbastanza fastidioso: l'inserimento con <code>pushd</code> delle nuove directory in cima allo stack modifica l'ordine delle directory salvate; questo fa perdere il vantaggio di ricordare l'indice consueto rallentando, quindi, il lavoro.  


Qui di seguito viene proposta una semplice funzione, chiamata <code>pushd_rev</code> che ha il compito di inserire una directory alla base dello stack anziché in cima. Il vantaggio è quello di non modificare gli indici delle directory precedentemente salvate e ricordate.<br/>
Qui di seguito viene proposta una semplice funzione, chiamata <code>pushd_rev</code>, che ha il compito di inserire una directory alla base dello stack anziché in cima. Il vantaggio è quello di non modificare gli indici delle directory precedentemente salvate e ricordate.<br/>
<pre>
<pre>
pushd_rev() {
pushd_rev() {
Riga 433: Riga 433:
local tmp i
local tmp i


if [ $1 == "." ]; then pushd -n $PWD
if [ $1 == "." ]; then pushd -n $PWD &>/dev/null
else pushd -n $1
elif [ ${1:0:1} != "/" ]; then pushd -n $PWD/$1 &>/dev/null
else pushd -n $1 &>/dev/null
fi
fi


Riga 442: Riga 443:
  DIRSTACK[i+1]=$tmp
  DIRSTACK[i+1]=$tmp
done
done
dirs
return 0
return 0
}
}
</pre>
</pre>
la funzione accetta un unico argomento (la directory da inserire alla base dello stack) e controlla che lo stack non contenga una sola directory, inoltre, al termine del comando, la directory corrente di lavoro resta invariata.<br/>
È possibile inserire le precedenti righe in <code>.bashrc</code> e poi eseguire un:
È possibile inserire queste righe in <code>.bashrc</code> e poi eseguire un:
<pre>
<pre>
$ . .bashrc
$ . .bashrc
</pre>
</pre>
per rendere effettive le modifiche al file.
per rendere effettive le modifiche al file.
La funzione accetta un unico argomento (la directory da inserire alla base dello stack) e controlla che lo stack non contenga una sola directory, inoltre, al termine del comando, la directory corrente di lavoro resta invariata. La directory passata come argomento può avere un percorso relativo, un percorso assoluto e può essere uguale a "."<br/>


Esempio:
Esempio:
<pre>
<pre>
$ pwd
/home
$ dirs -v
$ dirs -v
  0 ~
  0 /home
  1 /etc
  1 /etc
  2 /var
  2 /var
Riga 461: Riga 466:
  4 /boot
  4 /boot
$ pushd_rev /home/pippo
$ pushd_rev /home/pippo
$ pushd_rev /home/pluto
$ pushd_rev pluto
$ pushd_rev /home/paperino
$ pushd_rev .
$ dirs -v
$ dirs -v
  0 ~
  0 /home
  1 /etc
  1 /etc
  2 /var
  2 /var
Riga 471: Riga 476:
  5 /home/pippo
  5 /home/pippo
  6 /home/pluto
  6 /home/pluto
  7 /home/paperino
  7 /home
</pre>
</pre>
si può vedere come le directory <code>/etc</code>, <code>/var</code>, <code>/usr</code> e <code>/boot</code> mantengano il loro indice nello stack.
si può vedere come le directory <code>/etc</code>, <code>/var</code>, <code>/usr</code> e <code>/boot</code> mantengano il loro indice nello stack.