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/Main
lavori.
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
C'è un'opzione Shell cdable_vars
:
cdable_vars
Se impostato, si presume che un argomento del comando incorporatocd
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
).
Forse è meglio usare i 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 (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
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
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
.
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$
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.
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