Ejecute un script desde cualquier lugar

8

Tengo un guion:

#!/bin/bash
echo "$(dirname $(readlink -e $1))/$(basename $1)"

que se sienta aquí: /home/myuser/bin/abspath.shque tiene permisos de ejecución.

Si corro echo $PATHme sale lo siguiente:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/myuser/bin

Deseo poder, desde cualquier directorio, llamar abspath <some_path_here>y llamar a mi script. Estoy usando bash, ¿qué estoy haciendo mal?

leopardo
fuente

Respuestas:

30

Desea escribir abspath, pero el programa se llama abspath.sh. El problema no está relacionado con si está en la RUTA, sino con el hecho de que simplemente no está usando su nombre para llamarlo.

Tienes dos opciones:

  1. Escriba en su abspath.shlugar.
  2. Cambie el nombre del programa a abspath.
Michael Hampton
fuente
1
... O crear una simlink: cd $HOME/bin ; ln -s abspath.sh abspath. Esto le permite mantener la extensión correcta para el script y tener una herramienta con el nombre que desee. (En un futuro, podría reemplazar su script de shell por un script de python, por ejemplo ...)
F. Hauri
O crea un alias.
Jenny D
6

Este código es lo suficientemente pequeño como para codificarlo como una función de shell:

abspath() {
    echo "$(dirname "$(readlink -e "$1")")/$(basename "$1")" 
} 

Y sí, sí quieres todas esas citas.

Glenn Jackman
fuente
4

establezca un alias agregando su comando en el archivo .bashrc.

alias abspath='sh /home/myuser/bin/abspath.sh'

Y no olvides buscar el archivo.

Balasekhar Nelli
fuente
1
¿Por qué quieres sudo aquí?
un CVn
1
Rechazaría el voto si tuviera suficiente reputación porque usar sudo innecesariamente es simplemente incorrecto. Parece que algunas personas usan automáticamente sudo para todo en lugar de aprender cuándo y por qué es necesario.
Scott Severance,
De acuerdo con ustedes, chicos. Y sé cuándo usar sudo. No vi todas las preguntas.
Balasekhar Nelli
2

Cambiaría el nombre de su script bash para abspathluego moverlo al bindirectorio. Podrás llamar abspathdesde cualquier lugar entonces

Harvey
fuente
0

Una tercera opción es crear un alias llamado abspath que apunte a su script abspath.sh.

tokamak
fuente
55
No es necesario si se soluciona como explica la solución aceptada, también es bastante complicado y en realidad oculta un problema en lugar de abordarlo.
Dawud
No vale la pena discutirlo, pero no hace falta decir que si lo resuelve con una solución, no necesita aplicar otra solución. Sí, esta es una solución de bandaid y referirse directamente al script de shell es una solución más ideal.
tokamak