Como posso executar o aplicativo de qualquer lugar do terminal sem estar no caminho completo

Como posso executar o aplicativo de qualquer lugar do terminal sem estar no caminho completo

Eu tenho um aplicativo que posso executar enquanto estou no local do arquivo conforme abaixo:

-$ cd home/myApps/app
-$ ./run.sh

Quero chamar o run.sh de qualquer lugar do meu terminal sem estar no caminho completo, tentei usar o alais e adicionar o código abaixo ao arquivo bashrc.

alias mylovleyapp=/home/myApps/app/run.sh

o problema é que sempre que eu quero executar o aplicativo usando mylovleyapp, o programa retorna erro porque o run.sh está dependendo de outros arquivos na pasta myApps

Como posso conseguir isso?

Responder1

Existem muitos caminhos para Roma.

Alias

Se preferir um alias, você pode fazer o seguinte:

alias mylovleyapp='(cd home/myApps/app && ./run.sh)'

As chaves (...)fazem com que os dois comandos sejam executados em um subshell. Assim, seu diretório atual não será alterado após o término do programa.

Um script wrapper em seu PATH

Em vez disso, você pode criar um script wrapper e colocá-lo em uma pasta que esteja em sua pesquisa PATH, por exemplo, ~/.local/binou ~/binse você for o único usuário que precisa de acesso ou /usr/local/binse todos os usuários precisarem de acesso. Então tudo que você precisa fazer é digitar o nome do script para iniciar o programa.

O script pode ser exatamente o que você normalmente faz para iniciar o programa:

#!/usr/bin/env bash
cd home/myApps/app
./run.sh

Salve esse script, por exemplo, como ~/.local/bin/mylovleyapp. Torne o script executável para que possa ser executado:

chmod +x ~/.local/bin/mylovleyapp

Se ~/.local/binnão existisse e você tivesse que criá-lo, efetue logout e login novamente para que ele seja incluído automaticamente em seu arquivo PATH. De agora em diante, basta digitar mylovleyappno terminal para executar seu aplicativo.

Responder2

Como o OP não forneceu um script de exemplo, vou criar um. Isso fará uma coisa. Execute lsno diretório do script.

Sim, eu sei que você pode simplesmente passar lssem o arquivo ./. Mas, para este exemplo, estou fingindo que é necessário demonstrar um script que usa o diretório atual do script.

#!/usr/bin/env bash
ls ./

Salve esse script em algum lugar. Vou salvá-lo como /home/ubuntu/test/myscript. Torne-o executável com chmod +x /home/ubuntu/test/myscript. Agora, vá cdpara o diretório onde o script está (por exemplo, cd /home/ubuntu/test) e execute o script com ./myscript:

ubuntu@computer:~/test$ ./myscript
myscript someRandomFile

Até agora tudo bem. Mas agora vamos executá-lo em um diretório diferente. Neste exemplo, vou executá-lo no diretório raiz ( /).

ubuntu@computer:~/test$ cd /
ubuntu@computer:/$ /home/ubuntu/test/myscript
bin  dev home lib   lib64  lost+found mnt proc run  snap sys usr
boot etc init lib32 libx32 media      opt root sbin srv  tmp var

Ops. Queríamos imprimir os arquivos no local do script, não no local do usuário. Antes de descobrirmos a solução, pense empor quefaz isso por um momento. A resposta é simples. ./é relativo aoUsuáriosdiretório atual, não o do script.

Para obter o diretório do script de dentro do script, veremosesta pergunta do Stack Overflow.

A essência é simples: script_dir="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"obterá o diretório atual do script e o armazenará na variável script_dir.

Vamos atualizar o script de acordo. Nosso script agora é este:

#!/usr/bin/env bash
script_dir="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
ls "$script_dir"

Vamos executá-lo e ver se funciona:

ubuntu@computer:/$ /home/ubuntu/test/myscript
myscript someRandomFile

Funciona! Ele imprime os arquivos no diretório do script, mesmo quando você não está no mesmo diretório do script, pronto. A ideia geral é simples. No script, ./refere-se ao diretório do usuário. "$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"refere-se ao diretório em que o script está. Atualize seu script adequadamente e ele deverá funcionar.

Responder3

Você precisa adicionar o caminho do seu aplicativo à variável PATH. Para fazer isso temporariamente, vá até o diretório onde seu aplicativo está e então:

PATH=.:$PATH

Agora você pode chamar seu aplicativo de qualquer lugar sem precisar digitar o caminho completo. Se você fechar o terminal, esta configuração será perdida.

Para defini-lo permanentemente, você precisa editar seu arquivo .bashrc e adicionar :/home/myApps/app ao final do seu PATH. Salve o novo arquivo .bashrc e então:

source .bashrc

Responder4

Portanto, você precisa alterar seu diretório de trabalho para aquele em que o aplicativo de destino está e, em seguida, executar o aplicativo para que ele possa encontrar os arquivos dependentes.

Acho que você pode fazer isso fornecendo dois comandos separados no alias: um para alterar o diretório e outro para executar o programa, separados por ponto e vírgula.

Portanto, sua .bashrcadição deve ser:

alias mylovleyapp='cd /home/myApps/app; ./run.sh'

Isso pressupõe que os arquivos dependentes estejam em /home/myApps/app... caso contrário, você pode alterar o diretório de trabalho para aquele com os arquivos dependentes e executar o aplicativo usando um caminho absoluto como segundo componente.

informação relacionada