Adicionar ao caminho apenas o arquivo sh não é um dir

3

Eu tenho uma pasta bin com um monte de arquivos sh. Por exemplo, "server-run.sh", "server-stop.sh", "server-do-something.sh". E eu quero rodar o arquivo "server-stop.sh" de qualquer lugar. Eu poderia adicionar essa pasta bin ao caminho, mas os arquivos "run" e "do-something" também estarão disponíveis e eu não quero poluir o meu console. Também não quero adicionar este arquivo à pasta / bin, porque isso pode mudar. Talvez link. Posso de alguma forma adicionar apenas "server-stop.sh" ao caminho?

    
por Moses 21.04.2014 / 10:23

4 respostas

6

A melhor maneira é adicionar um link simbólico a este arquivo no diretório /usr/local/bin :

cd /usr/local/bin
ln -s server-stop.sh /path/to/your/folder/server-stop.sh

Neste caso, você está adicionando um link para o arquivo original, então você sempre pode alterar o arquivo original e seu comando sempre estará funcionando.

    
por Елин Й. 21.04.2014 / 10:29
4

Criando links em /usr/bin works, mas, a menos que você queira que os scripts estejam disponíveis para todos os usuários, eu prefiro criar os links em ~/bin , com o mesmo resultado, mas sem tocar no sistema global. Além disso, o OP não mencionou onde os scripts são armazenados. criar um link globalmente enquanto os scripts são armazenados localmente é uma prática ruim, então, eu gostaria de sugerir:

  • Crie um diretório local ~/bin .
  • Remova a extensão de idioma dos scripts (a menos que eles invoquem um ao outro), torne-os executáveis (veja mais abaixo).
  • Crie links para os scripts em ~/bin (ln -sf).
  • Faça logout e volte.

Com ou sem extensão de idioma, o script funcionaria perfeitamente bem. No entanto, existem alguns argumentos para usar o script sem extensão de idioma:

  • Por motivos de clareza, pode ser preferível nomear o link para o script semelhante ao script em si . manter a extensão de idioma seria menos conveniente ao invocar o script.
  • Embora um pouco exagerado em casos de scripts escritos pelo usuário, de acordo com convenções lintianas , scripts (ou links para scripts) em caminhos de pesquisa padrão não devem ter uma extensão de idioma. -
por Jacob Vlijm 21.04.2014 / 10:57
3

Eu usaria o comando bash hash para lembrar o local do script server-stop.sh :

hash -p /path/to/folder/server-stop.sh server-stop

Basta adicionar a linha acima ao seu arquivo .bashrc . Agora você pode usar server-stop em todos os lugares em bash shell / scripts.

Veja help hash :

hash: hash [-lr] [-p pathname] [-dt] [name ...]
Remember or display program locations.

Determine and remember the full pathname of each command NAME.  If
no arguments are given, information about remembered commands is displayed.

Options:
  -d        forget the remembered location of each NAME
  -l        display in a format that may be reused as input
  -p pathname   use PATHNAME is the full pathname of NAME
  -r        forget all remembered locations
  -t        print the remembered location of each NAME, preceding
        each location with the corresponding NAME if multiple
        NAMEs are given
Arguments:
  NAME      Each NAME is searched for in $PATH and added to the list
        of remembered commands.
    
por Sylvain Pineau 21.04.2014 / 10:35
2

Talvez um apelido seja o que você está procurando. Abra o arquivo ~/.bash_aliases e adicione o seguinte ao final do arquivo (o arquivo pode estar vazio, dependendo de você ter adicionado um alias anteriormente):

alias server-stop.sh='/path/to/your/server-stop.sh'

Prós:

  • Isso só adicionará server-stop.sh como você pretende

  • Isso não alterará sua variável $PATH

  • Outros usuários do seu sistema não são afetados

Contras:

  • Você terá que alterar o alias assim que alterar o caminho em que server-stop.sh está localizado (não acho que isso seja necessário com muita frequência)

  • Isso funcionará apenas para o bash shell, você terá que ver o que os outros shells usam para o alias.

por jobin 21.04.2014 / 10:37