bash - 如何通过 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 上运行脚本时,它使输出难以阅读。
解决方案
以您对拉曼答案的评论为基础。您是否尝试过压制.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。
推荐阅读
- java - 如何将 Java 日期时间代码转换为 Python
- spring-boot - 错误:执行 jar 时无法找到或加载主类
- javascript - 使用 if 语句声明 const 的值
- flutter - 在类及其状态的有状态小部件中定义构造函数
- r - 如何在正确位置使用 SelectInput 时保存在 DT 中所做的编辑
- azure - 安全中心/Sentinel Playbook 的自动化 RBAC 要求
- reactjs - 如何将弹出的 React 应用程序迁移到 TypeScript?
- css - 如何在 Fusion Slider 中更改标题背景颜色?
- php - 调用 PHP 变量以在 Python 脚本中使用它
- sql - 返回带有 Null 的表时出现问题