Como usar ln -s para criar um atalho de linha de comando?

11

Eu tenho um arquivo sh que gostaria de poder abrir a partir do terminal a qualquer momento. Eu gostaria de digitar "studio" no terminal e ter o android studio aberto

Lembro-me de ln -ster feito isso, mas esqueci e já perdi muito tempo pesquisando na web.

Além disso, em qual diretório o link simbólico criado é mantido?

Aqui está a sintaxe do meu esforço, comando não encontrado

ricardo@debian:~$ ln -s /opt/android-studio/bin/studio.sh studio
ricardo@debian:~$ studio
bash: studio: command not found
rickyjoepr
fonte
tente ./studio.
Sebastian
Eu quero fazer um link para ./studio que eu possa abrir em qualquer lugar, basta digitar no estúdio, ou banana
rickyjoepr
Se você deseja executar o script de qualquer lugar usando studiosozinho, é necessário colocar o link em um local que está sendo pesquisado pelo shell. O shell pesquisa tudo dentro echo $PATH. Você pode alterar $PATHou colocar o link em um dos diretórios do $PATH. O que você prefere?
Sebastian
4
@ Sebastian Por favor, use respostas para responder a perguntas, não comentários. E não sugira excluir perguntas depois que elas forem respondidas. Estamos aqui para criar um repositório de respostas que permaneçam por perto e sejam úteis para futuros visitantes.
Gilles 'SO- stop be evil'
1
Você pode gostar do aliascomando, que é comumente usado em vez de criar links simbólicos para encurtar os nomes dos comandos.
Winny

Respostas:

10

O comando que você executou criou um link simbólico no diretório atual. A julgar pelo prompt, o diretório atual é o diretório inicial. Criar links simbólicos para programas executáveis ​​em seu diretório pessoal não é particularmente útil.

Quando você digita o nome de um programa, o shell o procura nos diretórios listados na PATHvariável de ambiente . Para ver o valor dessa variável, execute echo $PATH. Os diretórios são separados por dois pontos ( :). Um caminho típico é, /home/ricardo/bin:/usr/local/bin:/usr/bin:/binmas há muita variação por aí.

Você precisa criar esse link simbólico em um dos diretórios listados em $PATH. Se você deseja disponibilizar o comando para todos os usuários, crie o link em /usr/local/bin:

sudo ln -s /opt/android-studio/bin/studio.sh /usr/local/bin/studio

Se você deseja disponibilizar o comando apenas para você (que é a única possibilidade se você não tiver privilégios de administrador), crie o link ~/bin(o binsubdiretório do diretório inicial).

ln -s /opt/android-studio/bin/studio.sh ~/bin/studio

Se a sua distribuição não colocar /home/ricardo/binno seu PATH(onde /home/ricardoestá o diretório inicial), crie-a primeiro mkdir ~/bine adicione-a PATHadicionando a seguinte linha a ~/.profile(crie o arquivo se ele não existir):

PATH=~/bin:$PATH

O .profilearquivo é lido quando você faz login. Você pode lê-lo no terminal atual executando . ~/.profile(isso se aplica apenas aos programas iniciados nesse terminal).

Gilles 'SO- parar de ser mau'
fonte
1
+1, mas, como comentário de Winny, acho que um apelido ~/.bashrcseria mais direto.
Sparhawk
@Sparhawk Um alias funcionaria apenas para invocar o programa a partir de um shell interativo, não de um script, atalho na área de trabalho ou qualquer outro programa.
Gilles 'SO- stop be evil' em
1
É verdade, mas a pergunta declara I would like to type "studio" into the terminal, e isso está implícito no título e nos comandos citados.
Sparhawk
1

A maneira mais intuitiva de implementar seu desejo é usar um alias. Tipo:

alias studio=/opt/android-studio/bin/studio.sh

ou insira um alias relacionado em .profile ou melhor: o que seu shell usa como $ ENV.

Observe que você ainda pode precisar adicionar

/opt/android-studio/bin

ao PATH para poder usar o software. O melhor é primeiro tentar se funciona sem um CAMINHO estendido.

esperto
fonte