Я только впервые попадаю в bash.
Как мне запустить функцию на сервере в этой области? статус drush - это что-то только на сервере, к которому подключен ssh.
#!/bin/bash
function test {
drush status
}
function connect {
ssh user@serveraddress 'test'
}
connect
Я понимаю, что вам нужно поместить удаленный код в ssh user @ server 'code here', однако сложные вещи путаются со всеми '"и т. Д. Например, это должно отражать все имена 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
Любые справочные ссылки приветствуются, ура
Вы можете использовать здесь-документы:
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
Можете ли вы просто поместить свой скрипт на удаленный хост и использовать ssh для его запуска?
ssh user@remote.tld /path/to/script
Или, если ваш сценарий не требует параметров командной строки, ypu может это сделать
cat script | ssh user@remote.tld
РЕДАКТИРОВАТЬ:
После некоторых дополнительных исследований это, вероятно, лучшее решение во всех отношениях.
ssh user@remote.tld 'bash -s' <script
или
ssh user@remote.tld 'bash -s' <script param1 param2
Если присутствует опция -s или если после обработки опции не осталось аргументов, то команды считываются из стандартного ввода. Эта опция позволяет устанавливать позиционные параметры при вызове интерактивной оболочки.
по-другому...
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
}
Другими словами: запускайте только самый необходимый код на удаленной машине, остальной - локальный. Или - вообще не использовать обратные кавычки:
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
}