首页 > 解决方案 > 如何通过 ssh 重定向 bash 登录时不需要的输出?

问题描述

我有一个脚本,它将使用 ssh 登录到另一台机器并在那里运行脚本。我的本地脚本会将所有输出重定向到一个文件。在大多数情况下它工作正常,但在某些远程机器上,我正在捕获我不想要的输出,而且它看起来像是来自 stderr。可能是因为 bash 处理其启动文件中的条目的方式,但这只是推测。

下面是一些最终出现在我的文件中的不需要的行的示例。

which: no node in (/usr/local/bin:/bin:/usr/bin)

stty: standard input: Invalid argument

我目前的方法是去掉我不想要的可预测的输出,但这感觉像是不好的做法。

如何仅从我的脚本中捕获输出?

这是运行远程脚本的行。

ssh -p 22 -tq user@centos-server "/path/to/script.sh" > capture

ssh 使用authorized_keys。

编辑:与此同时,我将致力于将机器 B 上脚本的输出定向到一个文件,然后通过 scp 将其复制到 A 并在 B 上删除它。但我真的希望能够抑制完全输出,因为当我在机器 A 上运行脚本时,它使输出难以阅读。

标签: bashshellsshcentos

解决方案


以您对拉曼答案的评论为基础。您是否尝试过压制.bashrc.bash_profile如下所示?

ssh -p 22 -tq user@centos-server "bash --norc --noprofile /path/to/script.sh" > capture

如果 rc-files 是某些服务器上的问题,您应该尝试修复损坏的 rc-files 而不是您的脚本/调用,因为它会影响所有(非交互式)登录。

尝试ssh user@host 'grep -ls "which node" .*'在您的所有服务器上运行以查找它们是否在任何点文件中具有“哪个节点”,如您的错误消息所示。

另一件要注意的是你的shebang。您将其标记为bash并编写 CentOS,但在 Debian/Ubuntu 服务器上#!/bin/sh为您提供dash而不是(sh-compatible)bash


推荐阅读