Você deve tentar:
command=$(ssh -q user@host 'ls "/usr/local/username/'$folder'" | wc -l')
Você não pode realmente aninhar backticks (e eu não sei por que você quis fazer isso de qualquer maneira).
Eu preciso fazer um script para procurar em algumas pastas e enviar um email se houver arquivos nessas pastas.
Eu tentei fazer algo assim, mas eu recebo erros com a variável de comando e impressão da pasta.
for folder in "FOLDER1" "FOLDER2"; do
command='ssh -q user@host "ls /usr/local/username/'{print $folder}' | wc -l"'
#echo $command
if [ $command -ne '0' ]
then
#send error email
fi
done
Isso pode ser muito mais simples. Eu não tenho idéia do que você está tentando fazer com {print $folder}
: as chaves não fazem sentido aqui, e se você está tentando incluir $folder
na string, você escreveria apenas $folder
. Você não deve analisar a saída de ls
, é muito raramente útil e muitas vezes falha.
if ! ssh user@host "test -e '/usr/local/username/$folder'"; then
# the file doesn't exist
Observe que o nome do arquivo deve ser citado para o shell remoto. Eu principalmente cuidei disso no meu comando acima, cercando o nome do arquivo no comando remoto com aspas simples, mas isso só funciona se $folder
em si não contiver nenhuma aspas simples. Se o seu shell local é bash, ksh93 ou zsh, use isso para citar qualquer citação simples:
q=\'\\'\'
if ! ssh user@host "[ -d '/usr/local/username/${folder//\'/$q}' ]"; then
Outra abordagem que geralmente é mais conveniente é montar o sistema de arquivos remoto com sshfs e trabalhar nele através do sistema de arquivos normal. interface. Eu recomendo isso, a menos que você esteja trabalhando com muitos servidores remotos ao mesmo tempo.
mkdir /path/to/mount/point
sshfs user@host /path/to/mount/point
if ! [ -d "/usr/local/username/$folder" ]; then