Estou especificando o caminho para o meu comando no arquivo / etc / profile :
export PATH=$PATH:/usr/app/cpn/bin
Meu comando está localizado em:
$ which ydisplay
/usr/app/cpn/bin/ydisplay
Então, quando eu executo a saída "echo $ PATH", é semelhante a:
$ echo $PATH
...:/usr/app/cpn/bin
E está tudo bem, mas quando estou tentando iniciar meu comando via SSH, estou recebendo um erro:
$ ssh 127.0.0.1 ydisplay
$ bash: ydisplay: command not found
Mas o meu caminho ainda está presente:
$ ssh 127.0.0.1 echo $PATH
...:/usr/app/cpn/bin
Explique-me por que o Bash não conseguiu encontrar o ydisplay durante a sessão SSH e como configurar o SSH corretamente para evitar esse problema.
Além disso, se eu especificar $ PATH no arquivo local .bashrc no usuário atual, tudo funcionará corretamente. Mas quero modificar apenas um arquivo, especificando muitos arquivos para cada usuário. É por isso que estou perguntando.
ydisplay
trabalho? fazssh 127.0.0.1 /usr/app/cpn/bin/ydisplay
o trabalho?ssh 127.0.0.1 echo $PATH
não faz o que você pensa que faz: o shell expande $ PATH antes que o ssh seja executado, para que não prove ou refute nada.Respostas:
tl; dr
Executando
ssh 127.0.0.1 ydisplay
fontes em~/.bashrc
vez de/etc/profile
. Mude seu caminho em~/.bashrc
vez disso.detalhes
A única vez que
/etc/profile
se lê é quando seu shell é um "shell de login".No Manual de Referência do Bash :
Mas quando você executa
ssh 127.0.0.1 ydisplay
,bash
não é iniciado como um shell de logon. No entanto, ele lê um arquivo de inicialização diferente. O Manual de Referência do Bash diz:Então você deve colocar suas
PATH
configurações~/.bashrc
.Na maioria dos sistemas,
~/.bash_profile
fontes~/.bashrc
, para que você possa colocar suas configurações apenas em~/.bashrc
vez de colocá-las nos dois arquivos.Não há nenhuma maneira padrão para alterar a configuração para todos os usuários, mas a maioria dos sistemas têm um
/etc/bashrc
,/etc/bash.bashrc
ou similar.Caso contrário, configure
pam_env
e insira aPATH
configuração/etc/environment
.Veja também:
fonte
Historicamente, os arquivos de perfil (
/etc/profile
e~/.profile
) eram chamados quando você fazia login (no console de texto, o que mais?) E serviam a muitos propósitos:stty
).Todos esses propósitos não foram identificados como separados até mais tarde. Como os scripts de perfil podem fazer coisas que só fazem sentido em uma sessão interativa (interação do terminal, iniciar outros programas), quando a chamada de shell remoto ( rsh ) foi introduzida, as marcas do rsh decidiram não chamar o shell remoto como um shell de logon, para que os scripts de perfil não sejam executados. (Algumas versões do
rshd
têm a opção de executar o shell remoto como um shell de logon.) O Ssh copiou esse comportamento para substituir o rsh.Se você deseja que seus scripts de perfil sejam executados, é possível invocá-los explicitamente.
Observe o comando
.
para carregar os scripts de perfil dentro do shell: eles são comandos a serem executados dentro desse shell, não um programa externo.Se você deseja definir uma variável de ambiente globalmente para todos os usuários, existe outro método em muitos sistemas: em vez de defini-lo
/etc/profile
, defina-o/etc/environment
. Este arquivo é lido através dopam_env
módulo; a maioria das distribuições Linux é configurada para lê-lo.Se o seu shell de login for bash, há uma possibilidade adicional. Normalmente, você não deve definir variáveis de ambiente
.bashrc
(porque elas não serão definidas nas sessões X, exceto se você passar por um terminal com um shell interativo, porque elas não serão definidas se você efetuar logon interativamente em um console de texto ou por um ssh, porque eles substituirão as configurações personalizadas se você chamar um shell dentro de outro programa). No entanto, o bash tem um recurso estranho que eu nunca entendi: ele lê~/.bashrc
em duas circunstâncias não relacionadas:rshd
ousshd
.Quando você executa um comando sobre ssh, está no segundo caso. Você pode organizar a leitura do seu perfil lendo
/etc/profile
e a.profile
partir de.bashrc
. Inclua o seguinte código no seu~/.bashrc
:fonte