Você pode usar aqui-documentos:
ssh user@serveraddress <<"END"
dbuser=user
dbpass=pass
DBS=$(mysql -u$dbuser -p$dbpass -Bse 'show databases'| egrep -v 'information_sch$')
for db in $DBS; do
echo "DB name - $db"
done
END
Veja: link
Estou apenas começando a bater pela primeira vez.
Como eu executaria uma função no servidor nesse escopo? O status do drush também é algo que está no servidor sendo conectado ao ssh.
#!/bin/bash
function test {
drush status
}
function connect {
ssh user@serveraddress 'test'
}
connect
Eu entendo que você precisa colocar o código remoto no ssh user @ server 'código aqui', no entanto coisas complicadas se confundem com todas as '"etc. Por exemplo, isso deve ecoar todos os nomes do servidor db.
function connect {
ssh user@serveraddress
'
dbuser=user
dbpass=pass
DBS='mysql -u$dbuser -p$dbpass -Bse 'show databases'| egrep -v 'information_sch$
for db in $DBS; do
echo "DB name - $db"
done
'
}
connect
Qualquer link de ajuda é apreciado, felicidades
Você pode usar aqui-documentos:
ssh user@serveraddress <<"END"
dbuser=user
dbpass=pass
DBS=$(mysql -u$dbuser -p$dbpass -Bse 'show databases'| egrep -v 'information_sch$')
for db in $DBS; do
echo "DB name - $db"
done
END
Veja: link
Você não pode simplesmente colocar seu script no host remoto e usar o ssh para executá-lo
ssh [email protected] /path/to/script
Ou se o seu script não requer parâmetros de linha de comando, o ypu pode fazer isso
cat script | ssh [email protected]
EDITAR:
Depois de mais algumas pesquisas, esta é provavelmente uma solução melhor em todo o mundo
ssh [email protected] 'bash -s' <script
ou
ssh [email protected] 'bash -s' <script param1 param2
If the -s option is present, or if no arguments remain after option processing, then commands are read from the standard input. This option allows the positional parameters to be set when invoking an interactive shell.
de outra forma ...
function connect {
dbuser=user
dbpass=pass
DBS='ssh user@serveraddress "mysql -u$dbuser -p$dbpass -Bse 'show databases'"|egrep -v 'information_sch$''
for db in $DBS; do
echo "DB name - $db"
done
}
Em outras palavras: Somente execute o código mais necessário na máquina remota, o restante local. Ou - não use backticks:
function connect {
dbuser=user
dbpass=pass
ssh user@serveraddress "mysql -u$dbuser -p$dbpass -Bse 'show databases'" \
|egrep -v 'information_sch$' \
|while read db; do
echo "DB name - $db"
done
}