Usando o SSH em um script bash para executar comandos no servidor envolvendo variáveis. [fechadas]

2

Eu escrevi um script bash que deve receber entradas, conectar-se a um servidor remoto e executar uma série de comandos usando as entradas fornecidas. Isso vai acabar sendo muito mais complicado do que isso, mas aqui está um exemplo muito simples:

#!/bin/bash
NAME=$1
echo $NAME
ssh user@server "ls $NAME"

Se codificar duro o nome do arquivo no comando ssh do script bash, recebo uma resposta e, se eu digitar essas linhas exatas, configurando $ NAME para o nome do meu arquivo, na linha de comando, obtenho a resposta correta, mas a combinação de passar o nome do arquivo para o script e tentar retornar o "ls" retorna um erro informando que não há "tal arquivo ou diretório". Ele ecoa o nome do arquivo que eu forneci, então está sendo armazenado corretamente em $ NAME. O que estou fazendo errado?

    
por SRA 20.01.2017 / 07:18

1 resposta

3

Se $NAME contiver caracteres que são expandidos de alguma forma pelo shell (como espaços ou $ ), você terá problemas. Você tem que escapar deles. Isso rapidamente fica muito peludo. Para citar para todos os casos, você tem que colocar o nome do arquivo em um arquivo que você copia para o controle remoto e, em seguida, usar o conteúdo como argumento para o seu comando. Algo como:

NAME="$1"
TMPF=/tmp/tmpf-$$ # If you have mktemp then use that instead
printf %s "$NAME" >$TMPF
scp "$TMPF" user@server:$TMPF
ssh user@server "ls \"$(cat $TMPF)\""
    
por 20.01.2017 / 08:19