bash函数用ssh

我只是第一次进入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 }