¿Cómo ejecutar scripts sin escribir la ruta completa?

56

Me gustaría saber si hay una manera de ejecutar el script de programa / shell sin escribir la ruta completa:

/opt/idea/bin/idea.sh
Poorman_Patrick
fuente
Siempre puede dar la ruta completa del archivo.
muru
Gracias @muru, esto lo sé, pero es un programa que uso con frecuencia, por lo que me gustaría poder ejecutarlo con un comando simple, no una ruta de archivo larga.
Jonny
nufailm.blogspot.com/2012/05/… esto ayudará a la idea :)
dedunumax

Respuestas:

60

Puedes crear un enlace simbólico . Créalo en /usr/local/bin. Todo lo que necesitas es ejecutar el comando:

sudo ln -s /full/path/to/your/file /usr/local/bin/name_of_new_command

Después de eso debes hacer tu fileejecutable:

chmod +x /full/path/to/your/file

Ahora debería poder ejecutar name_of_new_commanden cualquier momento en su terminal.

Tenga en cuenta que esta es una buena solución solo para el uso doméstico de Linux.

c0rp
fuente
11
Tenga en cuenta que no debe colocar un enlace simbólico /usr/local/binque apunte a un script en una carpeta de inicio privada, como /home/jack/myscript.sh, por jacklo general , solo el usuario podría ejecutarlo. El enlace simbólico será visible para otros usuarios, pero no el archivo al que apunta. En un sistema de un solo usuario, esto puede no importar, pero aun así, es una "buena práctica" colocar guiones (o enlaces a guiones) que todos los usuarios puedan leer /usr/local/bin, y guiones privados, hechos a sí mismos (o enlaces a guiones) de un solo usuario en su ~/bincarpeta.
Malte Skoruppa
agregar un enlace simbólico en / usr / sbin / lo hace accesible desde cualquier lugar
Seyfi
28

Puede agregar /opt/idea/bina su PATHvariable:

PATH=/opt/idea/bin:"$PATH"

Después de esto, puede ejecutarlo simplemente idea.sh.

Probablemente desee agregar esta línea en su ~/.bashrcarchivo.

janos
fuente
2
también: si hace que el script sea ejecutable, la extensión .sh puede omitirse (suponiendo que use el shebang en la parte superior del script). simplemente "idea" es suficiente entonces.
Jacob Vlijm
1
@Jacob: no puede omitir la extensión, ya que es parte del nombre del archivo ejecutable (esto no es Windows, donde la magia como esa causa otros problemas). Para llamar al script con el nombre idea, deberá crear un enlace o alias con ese nombre apuntando al idea.shscript.
Jonathan Callen
2
@JonathanCallen Callen ciertamente puedes! haga que el script sea ejecutable, elimine la extensión .sh tanto del nombre de archivo como del comando para ejecutarlo, dado que inicia el script con shebang #! / bin / bash.
Jacob Vlijm
1
@Jacob, lo que quiero decir es que sin renombrar el archivo , no puedes (y parece que esto es parte de un paquete de software más grande, por lo que no deberías cambiar el nombre de los archivos)
Jonathan Callen
2
Gracias @Jacob, observe que dice "Cuando los scripts se instalan en un directorio en la RUTA del sistema" . El idea.shscript no es tal script, de hecho, moverlo fuera de su directorio de instalación es completamente incompatible. Las reglas de empaquetado de Debian no se aplican aquí.
janos
15

Puede crear una función en su ~/.bashrc:

some-name () {
    /path/to/your/file
    # or:
    #cd /path/to/your
    #./path
}

O puedes crear un alias:

alias some-name='/path/to/your/file'
# or  
#alias some-name='cd /path/to/your/; ./file'

En ambos casos, puede ejecutarlo llamando a:

$ some-name

Si el archivo no depende de dónde se está ejecutando, considere agregarlo a su ~/bin:

mkdir -p ~/bin
cp /path/to/you/file ~/bin
# or mv /path/to/you/file ~/bin
# or ln -s /path/to/you/file ~/bin

~/bin, si existe, se agrega a su $PATHautomáticamente. Entonces llamas directamente file:

$ file

(Sin embargo, mala elección de nombre, considere llamarlo algo menos genérico).

muru
fuente
@Oli siempre me da los cinco minutos, tiendo a añadir sangrías. :) Es molesto ya que necesito engañar al editor para que use Ctrl-K para sangrías de segundo nivel.
muru
2
+1 en particular para la solución de agregar filea tu ~/bin, que es lo que suelo hacer (para scripts más largos) Tendría probablemente incluso poner que uno en la parte superior :) Alias son buenos para los accesos directos a los comandos con ciertos parámetros, por ejemplo, alias l='ls -CF'. Aunque he visto usos mucho más impresionantes de los alias . No tiendo a declarar funciones en ~/.bashrc(prefiero tener todos mis scripts organizados en archivos separados en ~/bin). Aunque todo esto es cuestión de gustos, supongo :)
Malte Skoruppa
@MalteSkoruppa Acabo de dar preferencia a los métodos que se prestan más fácilmente cd, porque el script puede depender del directorio de trabajo. :) De lo contrario, sí, tiendo a poner archivos en ~/binmí mismo.
muru
10

Puede crear un lanzador utilizando el siguiente comando:

gnome-desktop-item-edit --create-new <path-where-to-save>. Abriré esta ventana.

ingrese la descripción de la imagen aquí

Nómbralo como quieras y en el cuadro de comando escribe siguiente

sh -c '/opt/idea/bin/idea.sh' y guárdalo.

Ahora puedes ejecutar ese archivo usando el lanzador recién creado

O

Puede crear un archivo .desktop con los siguientes contenidos

[Desktop Entry]
Name=<whatever-you-want>
Exec=sh -c '/opt/idea/bin/idea.sh'     
Terminal=false
Type=Application
Icon='<path to an icon file if you want>'

Ahora guárdelo con .desktopextensión en cualquier lugar.

Hazlo ejecutable con este comando chmod a+x <your-desktop-file>

Ahora haga doble clic para abrirlo.

g_p
fuente
7

Podemos definir una función y una tecla de acceso rápido agregar mediante el bindcomando para llamar a eso. Abra el ~/.bashrcarchivo y agregue estas líneas:

# define function that opens your program in working directory
Openprog(){
    /your-Program/path/here
}

# bind hotkey to it (<F12>)
bind -x '"\e[24~":"Openprog"'

Ahora, cuando presiona F12, se iniciará su programa.

Nota: Una forma rápida de determinar el código de escape:

Abra su terminal y presione Ctrl+ V. Ahora presione su atajo de teclado favorito. Debe aparecer el código de escape correcto. Solo asegúrese de reemplazar ^[con \eantes de agregar el acceso directo a, por ejemplo, reemplazar ^[[24~con \e[24~.

αғsнιη
fuente
7

También podemos ejecutar /opt/idea/bin/idea.sharchivos directamente usandobash_aliases

Abra el ~/.bashrcarchivo ejecutando,

gedit ~/.bashrc

Elimine el #antes de las líneas y guárdelo, para que las líneas se vean como,

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Ahora abra el ~/.bash_aliasesarchivo,

gedit ~/.bash_aliases

Agregue las líneas a continuación en ese archivo y guárdelo,

alias idea='cd /opt/idea/bin && sudo ./idea.sh'

Finalmente busca el ~/.bashrcarchivo,

source ~/.bashrc

Ahora puede ejecutar el /opt/idea/bin/idea.sharchivo directamente,

idea
Avinash Raj
fuente
5

Además de las otras buenas respuestas, considere la posibilidad de establecer enlaces simbólicos ~/.local/biny agregar este directorio a su RUTA ( .bashrcpor ejemplo, desde dentro de su ). Este método no requiere permisos especiales (a diferencia del enlace simbólico a /usr/local/bin, por ejemplo). De esta manera, puede tener una estructura de directorio estándar sin inundar su $ HOME. Lea más sobre esto en estas https://unix.stackexchange.com/ preguntas:

abstrus
fuente
1

Cree un enlace suave en /usr/bindirecotyr:

ln -s /usr/bin/idea.sh  /opt/idea/bin/idea.sh

Ahora ejecútelo usando:

idea.sh
J.Franks
fuente
0

O simplemente puedes usar

nano ~/.bashrc

y añadir

PATH=/full/path/to/file:"$PATH"

Al final, guarde y salga. Luego, simplemente puede escribir el nombre del archivo.

Ayuda al novato
fuente
0

Seguí todas las respuestas aquí y en otros lugares y muy pocos dejan de mencionar que es posible que deba CERRAR SESIÓN para que el comando finalmente funcione.

Solo para recapitular, especialmente para Xubuntu , pero también para otras variantes de Debian / Ubuntu , escribí estas simples instrucciones.

(en las siguientes instrucciones usamos el directorio ~ / bin , porque ese es automáticamente un lugar desde donde estos sistemas operativos buscan comandos. Vea aquí :

Instrucciones infalibles para que su comando funcione:

# Open Terminal with Ctrl + Alt + T (or your system's own shortcut)

# You'll work in your home folder, no need to use sudo for any of this

cd # Go to home directory

mkdir -p bin # Create folder ~/bin if it doesn't exist

# Be careful not to type /bin, that's the bin folder in system root: /

sudo apt install nano # Skip this if you have Nano installed

nano bin/yournewcommand

    # In Nano, type:

    printf "Your new command works! \n" # \n means line break

    # Ctrl+X To leave Nano

    # Ctrl+Y To save the unsaved file

    # Enter to confirm

chmod +x bin/yournewcommand

yournewcommand # If you just created the bin folder, this command might not yet work.

# You must now log out and log back in to make the bin folder noticed (I think)

yournewcommand # Now it works! (You can use Tab to autocomplete the command you're typing)

# If you add a second file/command, it should work without logging out (at least in my tests)
Manu Järvinen
fuente