Назад | Перейти на главную страницу

функция bash с ssh

Я только впервые попадаю в 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

Видеть: http://tldp.org/LDP/abs/html/here-docs.html

Можете ли вы просто поместить свой скрипт на удаленный хост и использовать 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

}