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?

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.

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.


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.


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


0

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.