我只是第一次进入bash。
我如何在这个范围内的服务器上运行一个函数? 只有在服务器上才是ssh连接的。
#!/bin/bash function test { drush status } function connect { ssh user@serveraddress 'test' } connect
我知道你需要把远程代码放在ssh user @ server的代码中,但是复杂的东西会和所有''等混淆。例如,这应该会回显服务器的所有数据库名称。
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 [email protected] /path/to/script
或者,如果您的脚本不需要命令行参数ypu可以做到这一点
cat script | ssh [email protected]
编辑:
经过一些更多的研究,这可能是一个更好的解决scheme
ssh [email protected] 'bash -s' <script
要么
ssh [email protected] 'bash -s' <script param1 param2
如果存在-s选项,或者在选项处理后没有任何参数,则从标准input中读取命令。 该选项允许在调用交互式shell时设置位置参数。
其他方式…
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 }