Execute um script de qualquer lugar

8

Eu tenho um script:

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

que fica aqui: /home/myuser/bin/abspath.shque possui permissões de execução.

Se eu executar echo $PATH, recebo o seguinte:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/myuser/bin

Desejo poder, de qualquer diretório, ligar abspath <some_path_here>e chamar meu script. Estou usando o bash, o que estou fazendo de errado?

guepardo
fonte

Respostas:

30

Você deseja digitar abspath, mas o programa é nomeado abspath.sh. O problema não é se ele está no PATH, mas o fato de você simplesmente não estar usando o nome para chamá-lo.

Você tem duas opções:

  1. Digite em abspath.shvez disso.
  2. Renomeie o programa para abspath.
Michael Hampton
fonte
1
... Ou criar um simlink: cd $HOME/bin ; ln -s abspath.sh abspath. Isso permite que você mantenha a extensão correta do script e tenha uma ferramenta com o nome que desejar. (Você poderia, de alguma futur, substituir o seu script shell por um script python, por exemplo ...)
F. Hauri
Ou crie um alias.
Jenny D
6

Este código é pequeno o suficiente para codificá-lo como uma função shell:

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

E sim, você quer todas essas citações.

Glenn Jackman
fonte
4

defina um alias adicionando seu comando no arquivo .bashrc.

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

E não se esqueça de obter o arquivo.

Balasekhar Nelli
fonte
1
Por que você quer sudo aqui?
um CVn
1
Eu votaria negativamente se tivesse reputação suficiente, porque o uso desnecessário do sudo é simplesmente errado. Parece que algumas pessoas usam automaticamente o sudo para tudo, em vez de aprender quando e por que é necessário.
Scott Severance
Concordo com vocês. E eu sei quando usar o sudo. Não vi as perguntas inteiras.
Balasekhar Nelli
2

Renomearia seu script bash para abspathdepois movê-lo para o bindiretório Você poderá ligar abspathde qualquer lugar

Harvey
fonte
0

Uma terceira opção é criar um alias chamado abspath que aponte para o script abspath.sh.

tokamak
fonte
5
Não é necessário se for corrigido como a solução aceita explica, também bastante complicado e na verdade oculta um problema, em vez de resolvê-lo.
dawud 24/05
Não vale a pena discutir, mas não é preciso dizer que, se você o resolver com uma solução, não precisará aplicar outra solução. Sim, esta é uma solução bandaid e referir-se diretamente ao shell script é uma correção mais ideal.
precisa