Sé que esto debe ser algo tonto, pero de alguna manera estoy atascado tratando de crear un acceso directo (alias) para una función de shell.
Aquí está mi exacto .bash_profile
:
[[-s "$ HOME / .rvm / scripts / rvm"]] && source "$ HOME / .rvm / scripts / rvm" # Carga RVM en una sesión de shell * como una función * alias l = "ls -G" r () { echo "iron_worker upload $ 1" echo "iron_worker queue $ 1" } export -fr
Entonces agregué mi función r()
al final del archivo. Ahora, cuando escribo r
en el shell, sigo recibiendo un error:
-bash: r: command not found
He reiniciado el terminal, la ventana de shell y todavía no tengo ningún efecto.
Estoy en Mac OS 10.8.5 si eso importa.
EDITAR.
Después de algunas búsquedas, encontré esta pregunta sugiriendo usar en bash_profile
lugar de bashrc
, ¡que ahora está funcionando! Pero ... lo que obtengo son los comandos enumerados pero no ejecutados:
Dmitris-MacBook-Pro: ~ dmitrizaitsev $ r carga de iron_worker cola de iron_worker
Esta es la ejecución normal del comando que esperaba:
Dmitris-MacBook-Pro: ~ dmitrizaitsev $ iron_worker upload Especifique el nombre del paquete de código o la ruta al archivo de trabajo uso: iron_worker upload CODE_PACKAGE_NAME_OR_PATH_TO_WORKERFILE [OPCIONES] -n, --name NAME anula el nombre del código -c CONCURRENCIA, número máximo de trabajadores concurrentes para este paquete de código --max-concurrencia -r, --retries NUM_RETRIES número máximo de reintentos automáticos en caso de error de tarea -d RETRIES_DELAY, retraso entre cada reintento automático --retry-delay --worker-config CONFIG_FILE archivo de configuración para trabajador -h, --host nombre de host HOST, por ejemplo: www.midominio.com -a, --async no espere la compilación del paquete --full-remote-build activa la compilación remota completa --config CONFIG config file -e, --env entorno ENV --project-id ID de proyecto PROJECT_ID Dmitris-MacBook-Pro: ~ dmitrizaitsev $
En cambio, solo recibo el comando y nada más. ¿Alguna idea de lo que está pasando?
~/
y el contenido es como en la pregunta. ¿Es eso lo que quieres decir?Respuestas:
Debe usar, dentro del mismo archivo, la línea:
Para comprobar que esto funciona, debe usar un shell diferente que haya comenzado
after
para obtener su .bashrc, de modo que pueda haber heredado la nueva función. En proyectiles staler, esto no funcionará.Además, inserte esto en su
~/.bash_profile
:Si desea ejecutar el programa iron_worker, el cuerpo de la función r debería ser:
Además, le sugiero que proporcione la ruta completa al comando iron_worker (es decir, sustitúyala
iron_worker
por/path/to/iron_worker
).fuente
alias l="ls"
dentro del mismo archivo tampoco funcionan :(source .bashrc
, entonces funciona. Pero no se activa automáticamente en el nuevo shell a menos que lo vuelva a hacer :( ¿Hay alguna forma de obtenerlo automáticamente?Terminal e iTerm abren nuevos shells como shells de inicio de sesión de forma predeterminada, por lo que bash lee
~/.bash_profile
pero no~/.bashrc
.Tu también puedes:
~/.bash_profile
lugar de~/.bashrc
.. ~/.bashrc
a~/.bash_profile
./bin/bash
en Terminal.He hecho los dos últimos. Por ejemplo, tmux y el modo de shell en Emacs abren nuevos shells de inicio de sesión como shells sin inicio de sesión de forma predeterminada.
~/.bash_profile
todavía se lee cuando ssh a mi computadora.Consulte https://www.gnu.org/s/bash/manual/html_node/Bash-Startup-Files.html para obtener más información.
La
function
palabra clave en su definición de función es redundante por cierto.function name() { :; }
es idéntico aname() { :; }
en bash. Lafunction
palabra clave no está definida por POSIX.fuente