Dado que es una variable de entorno (el alias tiene una definición diferente bash), debe evaluarlo con algo como:
cd "${myFold}"
o:
cp "${myFold}/someFile" /somewhere/else
Pero en realidad me resulta más fácil, si solo desea la facilidad de cambiar a ese directorio, crear un alias real (en uno de los basharchivos de inicio como .bashrc), para que pueda ahorrar pulsaciones de teclas:
alias myfold='cd ~/Files/Scripts/Main'
Entonces puedes usar (sin el cd):
myfold
Para deshacerse de la definición, usa unalias. La siguiente transcripción muestra todos estos en acción:
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
in one of the bash startup files like .bashrc. Poner el alias en un archivo de inicio adecuado asegurará que esté disponible para todas las sesiones.Hay una opción de shell
cdable_vars:Podrías agregar esto a tu
.bashrc:shopt -s cdable_vars export myFold=$HOME/Files/Scripts/MainObserve que reemplacé la tilde con
$HOME; las comillas impiden la expansión de tilde y Bash se queja de que no hay un directorio~/Files/Scripts/Main.Ahora puedes usar esto de la siguiente manera:
cd myFoldNo es
$necesario. Ese es el punto, en realidad, como se muestra en otras respuestas,cd "$myFold"funciona sin la opción de shell.cd myFoldtambién funciona si la ruta enmyFoldcontiene espacios, no se requieren comillas.Por lo general, esto incluso funciona con el autocompletado de pestañas como la
_cdfunción enbash_completionverifica sicdable_varsestá configurada, pero no todas las implementaciones lo hacen de la misma manera, por lo que es posible que tenga quebash_completionvolver a buscar en su.bashrc(o editar/etc/profilepara configurar la opción de shell).Otros shells tienen opciones similares, por ejemplo, Zsh (
cdablevars).fuente
setopt cdablevarsparece que podría serlo, pero no sé nada de zsh.cdable_varscdproporcionada por bash-completamiento, que usa la_cdfunción (complete -o nospace -F _cd cd). Agregar-va eso (para completar en variables) funciona, pero puede tener efectos secundarios no deseados; para mí, muestra mi entorno completo cuando finalizo la pestaña.Quizás sea mejor usar enlaces
Enlace suave
Enlace simbólico o suave (archivos o directorios, más flexible y autodocumentado)
# Source Link ln -s /home/jake/doc/test/2000/something /home/jake/xxxEnlace duro
Enlace fijo (solo archivos, menos flexible y no autodocumentado)
# Source Link ln /home/jake/doc/test/2000/something /home/jake/xxxCómo crear un enlace a un directorio
Sugerencia : si no necesita ver el enlace en su casa, puede comenzar con un punto. ; luego estará oculto de forma predeterminada y luego podrá acceder a él como
cd ~/.myHiddelLongDirLinkfuente
Puede agregar las rutas que desee a la tabla hash de su bash:
hash -d <CustomName>=<RealPath>Ahora podrás hacerlo
cd ~<CustomName>. Para hacerlo permanente, agréguelo a su script bashrc .Tenga en cuenta que esta tabla hash está destinada a proporcionar un caché para que bash no necesite buscar contenido cada vez que se ejecuta un comando, por lo que esta tabla se borrará en eventos que invaliden el caché, por ejemplo, modificando
$PATH.fuente
zshpero no enbash.zshsolo funciona, al menos en mi sistema Ubuntu.En primer lugar, debe eliminar las comillas:
Las comillas evitan que el shell expanda la tilde a su significado especial de ser su
$HOMEdirectorio.A continuación, podría utilizar
$myFolderun entornouna variable de shell:bashboy@host:~$ cd $myFolder bashboy@host:~/Files/Scripts/Main$Para crear un alias , debe definir el alias:
alias myfolder="cd $myFolder"Luego puede tratar esto como un comando:
fuente
export..bashrcarchivo de recursos o en cualquier otro que utilice, y se definirá en el shell inmediato, pero no en los scripts de shell.Primero, necesita
$acceder al valor de "myFold" para que el código de la pregunta funcione:cd "$myFold"Para simplificar esto, crea un alias en
~/.bashrc:alias cdmain='cd ~/Files/Scripts/Main'No olvide obtener
.bashrcuna vez para que el alias esté disponible en la sesión actual de bash:source ~/.bashrcAhora puede cambiar a la carpeta usando:
fuente
Otra opción sería utilizar un enlace simbólico. es decir:
Después de eso, puede realizar operaciones para
~/myFold, como:que pondrá el archivo en formato
~/Files/Scripts/Main. Puede eliminar el enlace simbólico en cualquier momento conrm ~/myFold, que mantendrá el directorio original.fuente
cd myFoldasípwd, mostrará que está en myFold. Esto es un factor decisivo para mí porque los comandos relativos con el control de fuente p4 dependen del directorio actual.pwd -Ppero también es posible un alias real para un directorio, intente
myScripts="~/Files/Scripts/Main" alias myScripts="cd $myScripts"De esta manera tiene una convención de nomenclatura común (para cada par de directorio / alias), y si necesita copiar algo del directorio actual a myScripts, no tiene que pensar en ello.
IHTH
fuente
Las respuestas anteriores que probé no permiten la expansión automática (autocompletado) de los subdirectorios del directorio con alias.
Sin embargo, si empuja el directorio al que desea asignar un alias en la
dirspila ...$ pushd ~/my/aliased/dir... luego puede escribir
dirs -vpara ver su posición numérica en la pila:y consúltelo usando ese número para la mayoría, si no todos los comandos que esperan un parámetro de directorio:
Incluso puede utilizar Tabpara mostrar los subdirectorios inmediatos del directorio "alias":
$ cd ~0/<Tab> child_dir1 child_dir2fuente
Pon la siguiente línea en tu myscript
set myFold = '~/Files/Scripts/Main'En el uso terminal
source myscript cd $myFoldfuente