Como executar scripts sem digitar o caminho completo?

57

Gostaria de saber se existe uma maneira de executar o script de programa / shell sem digitar o caminho completo:

/opt/idea/bin/idea.sh
Poorman_Patrick
fonte
Você sempre pode fornecer o caminho completo do arquivo.
muru 22/09/14
Obrigado @muru, isso eu sei, mas é um programa que uso com frequência, então gostaria de poder executá-lo com um comando simples, não com um caminho de arquivo longo.
22914 Jonny
nufailm.blogspot.com/2012/05/… isso ajudará na idéia :) #
dedunumax 10/10

Respostas:

60

Você pode apenas criar um link simbólico . Crie-o /usr/local/bin. Tudo que você precisa é executar o comando:

sudo ln -s /full/path/to/your/file /usr/local/bin/name_of_new_command

Depois disso, você deve tornar seu fileexecutável:

chmod +x /full/path/to/your/file

Agora você deve poder executar name_of_new_commanda qualquer momento no seu terminal.

Observe que essa é uma boa solução apenas para uso doméstico do Linux.

c0rp
fonte
11
Observe que você não deve colocar um link simbólico /usr/local/binque aponte para um script em uma pasta pessoal particular, como /home/jack/myscript.sh, pois somente o usuário jacknormalmente poderá executá-lo. O link simbólico estará visível para outros usuários, mas não para o arquivo para o qual ele aponta. Em um sistema de usuário único, isso pode não importar, mas ainda é uma "boa prática" colocar scripts (ou links para scripts) que todos os usuários possam ler /usr/local/bine scripts privados (ou links para scripts) um único usuário em sua ~/binpasta.
Malte Skoruppa
adicione um link simbólico em / usr / sbin / o torna acessível de qualquer lugar #
Seyfi
28

Você pode adicionar /opt/idea/binà sua PATHvariável:

PATH=/opt/idea/bin:"$PATH"

Depois disso, você pode executá-lo com simplicidade idea.sh.

Você provavelmente deseja adicionar esta linha ao seu ~/.bashrcarquivo.

janos
fonte
2
também: se você tornar o script executável, a extensão .sh poderá ser deixada de fora (supondo que você use o shebang na parte superior do script). simplesmente "idéia" é suficiente então.
#
11
@ Jacob: você não pode interromper a extensão, pois isso faz parte do nome do arquivo do executável (este não é o Windows, onde uma mágica como essa causa outros problemas). Para chamar o script com o nome idea, você teria que criar um link ou alias com esse nome apontando para o idea.shscript.
Jonathan Callen
2
@JonathanCallen Callen você certamente pode! torne o script executável, remova a extensão .sh do nome do arquivo e do comando para executá-lo, considerando que você inicia o script com o shebang #! / bin / bash.
Jacob Vlijm
11
@Jacob o que quero dizer é , sem mudar o nome do arquivo , você não pode (e parece que este é parte de um pacote de software maior, para que você não deve apenas renomear arquivos)
Jonathan Callen
2
Obrigado @Jacob, observe que ele diz "Quando os scripts são instalados em um diretório no PATH do sistema" . O idea.shscript não é esse script, na verdade, movê-lo para fora do diretório de instalação não é completamente suportado. As regras de empacotamento do Debian não se aplicam aqui.
Janos
15

Você pode criar uma função no seu ~/.bashrc:

some-name () {
    /path/to/your/file
    # or:
    #cd /path/to/your
    #./path
}

Ou você pode criar um alias:

alias some-name='/path/to/your/file'
# or  
#alias some-name='cd /path/to/your/; ./file'

Nos dois casos, você pode executá-lo chamando:

$ some-name

Se o arquivo não depender de onde está sendo executado, considere adicioná-lo ao seu ~/bin:

mkdir -p ~/bin
cp /path/to/you/file ~/bin
# or mv /path/to/you/file ~/bin
# or ln -s /path/to/you/file ~/bin

~/bin, se existir, é adicionado $PATHautomaticamente ao seu . Então você liga diretamente para file:

$ file

(Má escolha de nome, considere chamá-lo de algo menos genérico.)

muru
fonte
@ Oli sempre dou meus cinco minutos, tendo a acrescentar recuos. :) É irritante, pois preciso enganar o editor para usar o Ctrl-K para recuos de segundo nível.
muru 22/09/14
2
+1 em particular para a solução de adicionar fileao seu ~/bin, que é o que eu costumo fazer (para scripts mais longos). Eu provavelmente colocaria esse no topo :) Aliases são bons para atalhos para comandos com certos parâmetros, por exemplo alias l='ls -CF',. Embora eu tenha visto usos muito mais impressionantes de aliases . Não costumo declarar funções ~/.bashrc(prefiro ter todos os meus scripts organizados em arquivos separados ~/bin). Apesar de tudo isso é uma questão de gosto, eu acho :)
Malte Skoruppa
@MalteSkoruppa Acabei de dar preferência aos métodos que mais se prestam cd, porque o script pode depender do diretório de trabalho. :) Caso contrário, sim, eu tendem a colocar arquivos em ~/binmim mesmo.
muru 22/09/14
10

Você pode criar um iniciador usando o seguinte comando:

gnome-desktop-item-edit --create-new <path-where-to-save>. Eu vou abrir esta janela.

insira a descrição da imagem aqui

Nomeie como quiser e, na caixa de comando, digite a seguir

sh -c '/opt/idea/bin/idea.sh' e salve.

Agora você pode executar esse arquivo usando o iniciador recém-criado

OU

Você pode criar um arquivo .desktop com o seguinte conteúdo

[Desktop Entry]
Name=<whatever-you-want>
Exec=sh -c '/opt/idea/bin/idea.sh'     
Terminal=false
Type=Application
Icon='<path to an icon file if you want>'

Agora salve-o com .desktopextensão em qualquer lugar.

Torne executável com este comando chmod a+x <your-desktop-file>

Agora clique duas vezes para abri-lo.

g_p
fonte
7

Podemos definir uma função e adicionar uma tecla de atalho usando o bindcomando para chamar isso. Abra o ~/.bashrcarquivo e adicione estas linhas a ele:

# define function that opens your program in working directory
Openprog(){
    /your-Program/path/here
}

# bind hotkey to it (<F12>)
bind -x '"\e[24~":"Openprog"'

Agora, quando você pressionar F12, seu programa será iniciado.

Nota: Uma maneira rápida de determinar o código de escape:

Abra seu terminal e pressione Ctrl+ V. Agora pressione o seu atalho de teclado favorito. O código de escape correto deve aparecer. Apenas certifique-se de substituir ^[por \eantes de adicionar o atalho para, por exemplo, substituir ^[[24~por \e[24~.

αғsнιη
fonte
7

Também podemos executar o /opt/idea/bin/idea.sharquivo diretamente usandobash_aliases

Abra o ~/.bashrcarquivo executando,

gedit ~/.bashrc

Remova o #antes das linhas e salve-o, para que as linhas pareçam,

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Agora abra o ~/.bash_aliasesarquivo,

gedit ~/.bash_aliases

Adicione as linhas abaixo nesse arquivo e salve-o,

alias idea='cd /opt/idea/bin && sudo ./idea.sh'

Finalmente, forneça o ~/.bashrcarquivo,

source ~/.bashrc

Agora você pode executar o /opt/idea/bin/idea.sharquivo diretamente,

idea
Avinash Raj
fonte
5

Além das outras boas respostas, considere ligar ~/.local/bine adicionar este diretório ao seu PATH (de dentro do seu, .bashrcpor exemplo). Este método não requer permissões especiais (diferentemente do link simbólico /usr/local/bin, por exemplo). Dessa forma, você pode ter uma estrutura de diretório padrão sem inundar seu $ HOME. Leia mais sobre isso nestas https://unix.stackexchange.com/ perguntas:

abstrus
fonte
1

Crie um link suave no /usr/bindiretório:

ln -s /usr/bin/idea.sh  /opt/idea/bin/idea.sh

Agora execute-o usando:

idea.sh
J.Franks
fonte
0

Ou você pode simplesmente usar

nano ~/.bashrc

e adicione

PATH=/full/path/to/file:"$PATH"

no final, salve e saia. Depois, você pode simplesmente digitar o nome do arquivo.

Ajude o novato
fonte
0

Eu segui todas as respostas aqui e em outros lugares e, portanto, poucos deixam de mencionar que talvez seja necessário sair do sistema para que o comando funcione eventualmente.

Apenas para recapitular, especialmente para o Xubuntu , mas também para outras variantes do Debian / Ubuntu , escrevi estas instruções simples.

(nas instruções a seguir, usamos o diretório ~ / bin , porque é automaticamente um local de onde esses SOs procuram comandos. Veja aqui :

Instruções à prova de erros para que seu comando funcione:

# Open Terminal with Ctrl + Alt + T (or your system's own shortcut)

# You'll work in your home folder, no need to use sudo for any of this

cd # Go to home directory

mkdir -p bin # Create folder ~/bin if it doesn't exist

# Be careful not to type /bin, that's the bin folder in system root: /

sudo apt install nano # Skip this if you have Nano installed

nano bin/yournewcommand

    # In Nano, type:

    printf "Your new command works! \n" # \n means line break

    # Ctrl+X To leave Nano

    # Ctrl+Y To save the unsaved file

    # Enter to confirm

chmod +x bin/yournewcommand

yournewcommand # If you just created the bin folder, this command might not yet work.

# You must now log out and log back in to make the bin folder noticed (I think)

yournewcommand # Now it works! (You can use Tab to autocomplete the command you're typing)

# If you add a second file/command, it should work without logging out (at least in my tests)
Manu Järvinen
fonte