6 999
contributi
S3v (discussione | contributi) (+ reverse pushd) |
S3v (discussione | contributi) (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> | ||
È possibile inserire le precedenti righe in <code>.bashrc</code> e poi eseguire un: | |||
È possibile inserire | |||
<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 | $ pushd_rev pluto | ||
$ pushd_rev | $ 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 | 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. |
contributi