A tela não pode executar 'Myscript.sh': Nenhum arquivo ou diretório

3

Estou tentando executar um script em uma máquina remota na sessão de tela usando o ssh. O comando que eu uso é:

ssh -t MYSERVER "cd tempdirXYZ; screen Myscript.sh"

Quando executo isso, vejo uma janela de tela por alguns segundos exibindo

cannot exec 'Myscript.sh': No such file or directory

Eu uso o bash na máquina remota e o script é colocado na minha pasta ~ / bin. Parece que quando eu executo o comando acima, meus arquivos bash não estão sendo originados. Eu nem tenho certeza se o bash é executado em tudo.

Existe alguma maneira de fazer isso funcionar sem alterar o comando? A máquina remota está executando o Ubuntu.

    
por Smith 06.09.2016 / 09:19

3 respostas

4

Acabei de perceber que você disse ~ / bin e não / bin.

Você precisa executar o seguinte para adicionar o diretório à variável PATH do sistema:

export PATH=\$PATH:/home/<username>/bin

Isso deve permitir que você execute o script como acima. Se não, provavelmente não está marcado como executável, então execute:

chmod +x ~/bin/Myscript.sh
    
por 06.09.2016 / 09:59
3

Há pouco que você pode fazer se não puder alterar o comando. O arquivo ~/.bashrc deve ser processado durante a execução desse comando.

O que pode estar acontecendo é que você tem um instrução de saída condicional em .bashrc, geralmente bem perto do começo, que irá sair se o shell atual for detectado como não interativo (neste caso, é). Às vezes, o script verifica se a variável de prompt principal PS1 está definida; que é um método comum mas feio para avaliar um shell interativo versus um não interativo. Neste caso, quando PS1 não está definido, o resto de .bashrc não é analisado.

Eu verificaria se esse é o caso - use algumas técnicas simples de depuração para ver se o .bashrc é originado e se termina antes (por exemplo, instruções echo). Você precisaria modificar o .bashrc na máquina remota para resolver isso, e isso pode quebrar outras coisas, como scp e sftp. Ou você pode simplesmente definir PS1 no seu comando remoto.

Existe um certo número de soluções alternativas se você puder modificar o comando remoto:

  1. Adicione os itens necessários para executar o script em um arquivo bash separado. Fonte diretamente em seu comando.
  2. Use os caminhos completos no comando e no script remoto. Eu não sei quais outras dependências de env além do PATH você tem, mas obviamente elas precisam ser tratadas também.
  3. Na máquina remota, preencha ~/.ssh/environment com todas as variáveis ambientais, aliases, funções etc. Modifique o arquivo de configuração ssh /etc/ssh/shhd para certificar-se de que a configuração PermitUserEnvironment esteja ativada; caso contrário, isso não funcionará.
  4. Adicione as configurações da variável ambiental ao comando, por exemplo, "export PATH=\$PATH:/home/you/bin;..." Escaping PATH garante que é o controle remoto versão que estamos adicionando, impedindo a expansão antes de enviar o comando.

Se nada disso funcionar, descreva suas restrições em mais detalhes.

    
por 06.09.2016 / 09:44
0

Para ver qual tipo de arquivo é reconhecido como

file myscript.sh

Definir usuário + permissões de execução

chmod u+x Myscript.sh
    
por 07.09.2016 / 04:30