相关疑难解决方法(0)

什么是在Bash中ssh和运行多个命令最干净的方法?

我已经设置了ssh代理,我可以在Bash脚本中运行外部服务器上的命令,例如:

ssh blah_server "ls; pwd;"
Run Code Online (Sandbox Code Playgroud)

现在,我真正想做的是在外部服务器上运行很多长命令.将所有这些包含在引号之间会非常难看,而且我宁愿多次避免ssh'ing以避免这种情况.

那么,有没有一种方法可以用括号括起来的一个方法做到这一点?我正在寻找以下内容:

ssh blah_server (
   ls some_folder;
   ./someaction.sh;
   pwd;
)
Run Code Online (Sandbox Code Playgroud)

基本上,只要它干净,我会对任何解决方案感到满意.

编辑

为了澄清,我在谈论这是一个更大的bash脚本的一部分.其他人可能需要处理脚本,所以我想保持清洁.我不希望有一个bash脚本,其中一行看起来像:

ssh blah_server "ls some_folder; ./someaction.sh 'some params'; pwd; ./some_other_action 'other params';"
Run Code Online (Sandbox Code Playgroud)

因为它非常丑陋且难以阅读.

unix ssh bash

326
推荐指数
14
解决办法
35万
查看次数

试图在bash中的变量中嵌入换行符

我有

var="a b c"
for i in $var
do
   p=`echo -e $p'\n'$i`
done
echo $p
Run Code Online (Sandbox Code Playgroud)

我想要打印最后一个回声

a
b
c
Run Code Online (Sandbox Code Playgroud)

请注意,我希望变量p包含换行符.我怎么做?

linux bash

92
推荐指数
5
解决办法
15万
查看次数

使用SSH在远程计算机上发出多个命令的其他方法?

似乎在这个问题中,答案是用分号分隔语句.但是,如果我们使用多个if语句和复杂的引用字符串进入复杂的脚本,那么这可能会变得很麻烦.我想.

我想另一个替代方案是简单地一个接一个地发出多个SSH命令,但这又是麻烦的,而且我没有设置公钥/私钥认证,所以这将要求密码多次.

我理想的情况与交互式shell体验非常相似:在脚本中的某一点上你会进入@the_remote_server并提示你输入的密码(交互式地)然后从那一点开始直到你的脚本发布"exit"命令,脚本中的所有命令都在远程机器上解释.

当然这不起作用:

ssh user@host.com
  cd some/dir/on/remote/machine
  tar -xzf my_tarball.tgz
  cd some/other/dir/on/remote
  cp -R some_directory somewhere_else
exit
Run Code Online (Sandbox Code Playgroud)

还有另一种选择吗?我想我可以从我的脚本中取出那部分并将其粘贴到远程主机上的脚本中.咩.现在我正在维护两个脚本.另外,我想要一个小配置文件来保存默认值和其他东西,我也不想在两个地方维护它.

还有其他解决方案吗?

unix shell scripting

5
推荐指数
1
解决办法
1340
查看次数

标签 统计

bash ×2

unix ×2

linux ×1

scripting ×1

shell ×1

ssh ×1