scripts em ~ / bin não funcionam ao se conectar através do ssh

2

Eu tenho alguns scripts na minha pasta $HOME/bin . Quando eu acesso minha máquina remotamente eu não posso usá-los e não consigo entender porque. Eles funcionam bem quando estou na frente do meu computador remoto.

Acho que pode ter algo a ver com o arquivo .bashrc . O PATH é definido com

PATH=$PATH:$HOME/bin
export PATH

parece correto para mim.

Eu também tentei copiar o arquivo na pasta /usr/bin e, novamente, mas ainda não consigo usar meu script.

Se eu entrar no diretório ~/bin e digitar ./myscript , o script funcionará (é só que preciso executá-lo em pastas diferentes nas quais tenho alguns arquivos para processar).

    
por lucacerone 06.06.2012 / 02:08

2 respostas

3

Isso está acontecendo porque quando você faz o login via SSH, o shell que você obtém é um login shell . Em contraste, para usar a terminologia da documentação bash , quando você abre uma janela do Terminal em uma sessão de login gráfica já iniciada, o shell que você obtém ainda é um shell interativo , mas é não é um shell de login .

Em man bash :

  

Quando bash é chamado como um shell de login interativo ou como   shell não interativo com a opção - login , ele primeiro lê e   executa comandos do arquivo /etc/profile , se esse arquivo existir.   Depois de ler esse arquivo, ele procura ~/.bash_profile ,    ~/.bash_login e ~/.profile , nessa ordem, e lê e   executa comandos do primeiro que existe e é legível. o   A opção - noprofile pode ser usada quando o shell é iniciado para inibir esse comportamento.

     

Quando um shell de login sai, o bash lê e executa comandos do   arquivo ~/.bash_logout , se existir.

     

Quando um shell interativo que não é um shell de login é iniciado,   o bash lê e executa comandos de /etc/bash.bashrc e    ~/.bashrc , se esses arquivos existirem. Isso pode ser inibido usando o   Opção - norc . A opção - rcfile arquivo forçará o bash a ler e executar comandos do arquivo em vez de /etc/bash.bashrc   e ~/.bashrc .

Então você deve verificar se tem algum desses arquivos:

  • ~/.bash_profile

  • ~/.bash_login

  • ~/.profile

Se fizer isso, edite o primeiro que encontrar e adicione $HOME/bin ao seu caminho. Se você não fizer isso, crie um deles para essa finalidade. (O melhor para criar é ~/.profile , já que outros shells usarão isso também.)

Você quase certamente tem ~/.profile , já que o comportamento padrão do Ubuntu é criar isso com qualquer nova conta de usuário (incluindo a primeira conta, criada quando você instala o Ubuntu).

No entanto, por padrão, esse arquivo já contém as linhas necessárias para adicionar seu diretório bin privado ao $PATH :

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Então, é um pouco estranho que isso não esteja funcionando para você.

Dependendo de suas necessidades, convém fazer ~/.profile (ou ~/.bash_login ou ~/.bash_profile ) chamar ~/.bashrc :

source ~/.bashrc

Mas seria ainda melhor incluir apenas linhas adicionando $HOME/bin ao seu $PATH em ~/.profile (ou ~/.bash_login ou ~/.bash_profile ), mas não ~/.bashrc . Afinal, se você fizer isso para cada shell de login, isso também deve acontecer quando você fizer login graficamente e for herdado por todos os seus shells interativos que não são shells de login.

    
por Eliah Kagan 06.06.2012 / 02:33
0

Basta colocar sua configuração no arquivo .bash_profile no diretório inicial.

Se você não tem, você pode criá-lo.

    
por Eduardo Leiva 06.06.2012 / 02:36