我刚刚第一次接触 bash。
我将如何在此范围内的服务器上运行某个功能?drush 状态仅在通过 ssh 连接的服务器上有效。
#!/bin/bash
function test {
drush status
}
function connect {
ssh user@serveraddress 'test'
}
connect
我知道您需要将远程代码放在 ssh 用户@服务器‘此处的代码’中,但是所有‘”等会使复杂的事情变得混乱。例如,这应该回显服务器的所有数据库名称。
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
任何帮助链接表示感谢,欢呼
答案1
您可以使用此处的文档:
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
答案2
你不能只将脚本放在远程主机上并使用 ssh 来运行它吗
ssh [email protected] /path/to/script
或者如果你的脚本不需要命令行参数,你可以这样做
cat script | ssh [email protected]
编辑:
经过进一步研究,这可能是一个更好的解决方案
ssh [email protected] 'bash -s' <script
或者
ssh [email protected] 'bash -s' <script param1 param2
如果存在 -s 选项,或者选项处理后没有剩余参数,则从标准输入读取命令。此选项允许在调用交互式 shell 时设置位置参数。
答案3
其他方式...
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
}