Crear un alias para un script bash

10

Así que he intentado experimentar y crear un aliasin .bashrc. Sin embargo, cuando pruebo el comando obtengo:

[rkahil@netmon3 ~]$ menu
-bash: menu: command not found

Esto es lo que tengo en el .bashrcarchivo:

# Source global definitions

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
alias menu='./menuScript.sh'
alias vi='vim'

Lo curioso es que cuando creé el alias vi, funcionó. Pero el menú no. He buscado publicaciones anteriores en UnixStackExchange e intenté seguir otras publicaciones, pero fue en vano. ¿Alguien más tiene alguna sugerencia?

ryekayo
fuente
1
¿Has probado con alias menu = 'bash ./menuScript.sh'? (No estoy en una máquina Linux, no puedo probarlo)
Con7e
¿De dónde estás ejecutando 'menú'? Si no es el mismo directorio que 'menuScript.sh', se quejará de un 'comando no encontrado'. Tal vez deberías usar una ruta absoluta?
garethTheRed
1
@garethTheRed Diría./menuScript.sh: command not found
Michael Mrozek
@MichaelMrozek - justo uno. Acabo de comprobar y dijo No such file or directory, que todavía no es lo mismo que el error del OP. Sin embargo, el punto sigue en pie: sería mejor con una ruta absoluta a menos que el alias siempre se vaya a usar desde el directorio donde menuScript.shreside.
garethTheRed
1
@ryekayo hecho :)
Con7e

Respuestas:

9

Deberías intentarlo con alias menu='bash ./menuScript.sh'. Actualmente no estoy en una máquina Linux, así que no puedo probarlo yo mismo, pero debería funcionar. Cuando llama al alias, no sabe qué hacer con la ruta, por lo que debe incluir el bashal principio.

Y restablecer el terminal ayuda después de realizar el cambio.

Con7e
fuente
No entiendo cómo es importante el primer párrafo, a menos que menuScript.shno haya sido chmodeditado al ejecutable, en cuyo caso el mensaje de error habría sido "Permiso denegado". Sospecho que forzar una nueva .bashrclectura del archivo es la respuesta. ... ... ... ... ... ... ... PS El shell sabe qué hacer con la ruta de la misma manera que si el usuario escribe ./menuScript.sh, intentando ejecutar el archivo.
Scott
7

Cuando tu lo hagas

alias menu='./menuScript.sh'

creas un alias que dice "ese archivo" pero no dice qué hacer con él.

Sin embargo, si lo haces

alias menu='source ./menuScript.sh'

o

alias menu='. ./menuScript.sh'

Estás diciendo ejecutar ese archivo.

Michael Durrant
fuente
6

¿Recordó buscar su archivo ~ / .bashrc después de hacer los cambios? Porque los cambios surten efecto en su archivo .bashrc después de reiniciar su computadora o simplemente obtener el archivo.

cbora
fuente
2
Este tipo de publicación parece que sería más adecuado para un comentario.
HalosGhost
2
@HalosGhost ¿Cómo te imaginas? Es lo primero en lo que pensaría también, causaría exactamente esto
Michael Mrozek
@MichaelMrozek, sugiero esto solo porque me parece que las publicaciones de respuesta deberían ofrecer una solución definitiva, por ejemplo, "Olvidaste tu fuente .bashrc, haz lo siguiente ...". Por otro lado, las preguntas aclaratorias (por ejemplo, "¿Se olvidó de ...?") Parecen más adecuadas para comentarios. No llevaría mucho tiempo reformular para hacer que esta publicación parezca mucho más adecuada para una respuesta.
HalosGhost
Si bien reiniciar su computadora funcionaría, solo necesita cerrar sesión en tty o en su sesión (si usa un administrador de inicio de sesión). Si ha iniciado sesión en un entorno gráfico y no quiere source ~/.bashrco . ~/.bashrc, puede abrir otro shell también. Es tan simple como eso. No se requiere reiniciar.
Dylan
0

La razón por la que funcionó vimes porque ese es un programa que ya se puede llamar sin una ruta directa. No tiene que decir explícitamente "Quiero que esto se ejecute como un programa" porque vimya es uno. Está codificado en el sistema operativo que cuando recibe el comando vim, vaya y ejecute el archivo /usr/bin/vio donde sea que esté el programa real.

Nathanael Morgan
fuente
Uh, no, no está codificado en el sistema operativo. Hay un archivo llamado vimdisponible en el $PATHque puede ser un ejecutable binario, un script ejecutable o incluso un enlace simbólico a otro programa. Si elimina la entrada vim, dejará de estar disponible para los usuarios.
roaima
@roaima Lo que quise decir es que llamar a vim es ligeramente diferente de llamar a un programa personalizado. Sin embargo, sí entiendo a qué te refieres, y estoy de acuerdo
Nathanael Morgan
Tengo un script llamado ifvique vive en mi $HOME/bin(que resulta estar en mi $PATH). Solo lo uso exactamente de la misma manera que podría ejecutar un binario instalado en el sistema. Realmente no importa que sea un programa personalizado.
roaima
0

Hay dos problemas con el alias

alias menu='./menuScript.sh'
  1. Requiere que estés en un directorio particular cuando invocas el alias. Si está en un directorio donde menuScript.shno existe, el alias no se ejecutará.

    Sería mejor si especificara la ruta absoluta completa al menuScript.shscript al definir el alias, por ejemplo

    alias menu="$HOME/local/bin/menuScript.sh"

    o similar.

  2. Como ya han dicho otros, otra razón por la cual el alias puede fallar es que el script no es ejecutable o que tiene una línea no válida #!. Asegúrese de que el script sea ejecutable con

    chmod +x menuScript.sh

    y que la primera línea del guión es

    #!/bin/bash

    o cualquiera que sea la ruta bash(o cualquier shell para el que esté escrito el script) en su sistema.

Kusalananda
fuente