相关疑难解决方法(0)

bash shell - ssh 远程脚本捕获输出和退出代码?

我希望使用 shell 来调用远程服务器上的脚本。我想捕获该脚本的输出(其日志消息)及其返回的退出代码。

如果我这样做:

ssh user@server /usr/local/scripts/test_ping.sh
echo "$?"
Run Code Online (Sandbox Code Playgroud)

我得到了退出代码,但无法捕获远程日志消息。

如果我这样做:

local RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh)
echo "$?" 
LOG "${RESULTS}";
Run Code Online (Sandbox Code Playgroud)

我可以使用我的 LOG 函数记录我的输出,但似乎无法获得正确的退出代码,我假设我获得的代码是来自变量赋值的代码。

我想继续使用我的 LOG 函数来捕获所有输出,因为它为我格式化并将内容发送到文件、系统日志和屏幕。

如何在 var 中捕获结果并从远程脚本中获取正确的退出代码?

shell bash ssh remote

30
推荐指数
2
解决办法
13万
查看次数

带引号的 ssh 命令

我有一个奇怪的错误,我一直无法找到任何关于此的信息。我想使用以下命令更改用户评论。

$ sudo usermod -c "New Comment" user
Run Code Online (Sandbox Code Playgroud)

这将在登录到服务器时工作,但我想在 20 多台服务器上实现自动化。通常我能够使用一个列表并遍历服务器并运行命令,但在这种情况下我会收到错误消息。

$ for i in `cat servlist` ; do echo $i ; ssh $i sudo usermod -c "New Comment" user ; done 
serv1
Usage: usermod [options] LOGIN

Options:
lists usermod options

serv2
Usage: usermod [options] LOGIN

Options:
lists usermod options
.
.
.
Run Code Online (Sandbox Code Playgroud)

当我运行这个循环时,它会抛出一个错误,比如我错误地使用了命令,但它会在单个服务器上运行得很好。

翻翻SSH手册页我曾尝试-t-t -t标志,但那些没有工作。

我已经成功地perl -p -i -e在类似的循环中使用来编辑文件。

有谁知道我无法循环的原因?

shell ssh quoting

17
推荐指数
2
解决办法
2万
查看次数

标签 统计

shell ×2

ssh ×2

bash ×1

quoting ×1

remote ×1