risposta-alla-domanda-sullo-sviluppo-web-bd.com

Come creare un "alias" per un lungo percorso?

Ho provato a creare un "alias" per un percorso che utilizzo spesso durante gli script di Shell. Ho provato qualcosa, ma non è riuscito:

myFold="~/Files/Scripts/Main"
cd myFold

bash: cd: myFold: No such file or directory

Come faccio a farlo funzionare?
Tuttavia, cd ~/Files/Scripts/Mainlavori.

78
bashboy

Poiché è una variabile di ambiente (l'alias ha una definizione diversa in bash), devi valutarla con qualcosa del tipo:

cd "${myFold}"

o:

cp "${myFold}/someFile" /somewhere/else

Ma in realtà trovo più facile, se vuoi semplicemente passare a quella directory, creare un alias reale (in uno dei file di avvio bash come .bashrc), così posso salvare i tasti:

alias myfold='cd ~/Files/Scripts/Main'

Quindi puoi semplicemente usare (senza il cd):

myfold

Per sbarazzarsi della definizione, si utilizza unalias. La seguente trascrizione mostra tutti di questi in azione:

pax> cd ; pwd ; ls -ald footy
/home/pax
drwxr-xr-x 2 pax pax 4096 Jul 28 11:00 footy

pax> footydir=/home/pax/footy ; cd "$footydir" ; pwd
/home/pax/footy

pax> cd ; pwd
/home/pax

pax> alias footy='cd /home/pax/footy' ; footy ; pwd
/home/pax/footy

pax> unalias footy ; footy
bash: footy: command not found
101
paxdiablo

C'è un'opzione Shell cdable_vars :

cdable_vars
Se impostato, si presume che un argomento del comando incorporato cd che non sia una directory sia il nome di una variabile il cui valore è la directory in cui cambiare.

Potresti aggiungere questo al tuo .bashrc:

shopt -s cdable_vars
export myFold=$HOME/Files/Scripts/Main

Nota che ho sostituito la tilde con $HOME; le virgolette impediscono l'espansione della tilde e Bash si lamenterebbe che non esiste una directory ~/Files/Scripts/Main.

Ora puoi usarlo come segue:

cd myFold

No $ necessario. Questo è l'intero punto, in realtà - come mostrato in altre risposte, cd "$myFold" funziona senza l'opzione Shell. cd myFold funziona anche se il percorso in myFold contiene spazi, senza virgolette.

Questo di solito funziona anche con il completamento automatico delle schede come _cd funzione in bash_completion controlla se cdable_vars è impostato, ma non tutte le implementazioni lo fanno allo stesso modo, quindi potresti dover procurarti bash_completion di nuovo nel tuo .bashrc (o modifica /etc/profile per impostare l'opzione Shell).


Altre shell hanno opzioni simili, ad esempio Zsh ( cdablevars ).

49
Benjamin W.

Forse è meglio usare i link

Soft Link

Collegamento simbolico o software (file o directory, più flessibile e auto-documentante)

#      Source                            Link
ln -s /home/jake/doc/test/2000/something /home/jake/xxx

Hard Link

Hard link (solo file, meno flessibile e non auto-documentante)

#    Source                            Link
ln /home/jake/doc/test/2000/something /home/jake/xxx

Come creare un collegamento a una directory

Suggerimento : se non è necessario visualizzare il collegamento in casa, è possibile avviarlo con un punto. ; allora sarà nascosto per impostazione predefinita, quindi è possibile accedervi come

cd ~/.myHiddelLongDirLink
8
Mahmoud Bahnasy

Innanzitutto, è necessario il $ per accedere al valore di "myFold" per far funzionare il codice nella domanda:

cd "$myFold"

Per semplificare questo, si crea un alias in ~/.bashrc:

alias cdmain='cd ~/Files/Scripts/Main'

Non dimenticare di procurarti il ​​.bashrc una volta per rendere disponibile l'alias nella sessione bash corrente:

source ~/.bashrc

Ora puoi passare alla cartella usando:

cdmain
5
hek2mgl

Puoi aggiungere tutti i percorsi che vuoi all'hashtable del tuo bash:

hash -d <CustomName>=<RealPath>

Ora sarai in grado di cd ~<CustomName>. Per renderlo permanente aggiungilo al tuo script bashrc.

Si noti che questa tabella hash ha lo scopo di fornire una cache affinché bash non debba cercare contenuti ogni volta che viene eseguito un comando, pertanto questa tabella verrà cancellata dagli eventi che invalidano la cache, ad es. modifica $PATH.

5
Rodrigo Martins

Prima di tutto, è necessario rimuovere le virgolette:

[email protected]:~$ myFolder=~/Files/Scripts/Main

Le virgolette impediscono a Shell di espandere la tilde al suo significato speciale di essere il tuo $HOME directory.

È quindi possibile utilizzare $myFolder un ambiente una variabile Shell:

[email protected]:~$ cd $myFolder
[email protected]:~/Files/Scripts/Main$

Per creare un alias, devi definire l'alias:

alias myfolder="cd $myFolder"

È quindi possibile trattare questo tipo di come un comando:

[email protected]:~$ myFolder
[email protected]:~/Files/Scripts/Main$
5
David W.

Un'altra opzione sarebbe quella di utilizzare un collegamento simbolico. vale a dire:

ln -s ~/Files/Scripts/Main ~/myFold

Successivamente è possibile eseguire operazioni su ~/myFold, ad esempio:

cp some_file.txt ~/myFold

che inserirà il file in ~/Files/Scripts/Main. Puoi rimuovere il link simbolico in qualsiasi momento con rm ~/myFold, che manterrà la directory originale.

4
dvj

ma è anche possibile un vero alias per una directory, provare

 myScripts="~/Files/Scripts/Main"
 alias myScripts="cd $myScripts"

In questo modo hai una convenzione di denominazione comune (per ogni coppia dir/alias) e se hai bisogno di copiare qualcosa dalla directory corrente a myScripts, non devi pensarci.

IHTH

2
shellter