linux - 将输出发送到另一个命令

标签 linux bash unix command-line-interface

我正在制作一个脚本,从传递到 ssh 的过程中读取密码,如果找不到主机名,我想停止该脚本,但我不知道如何读取 ssh 的输出

我试过了

test=$(ssh user@nonvalidip)
check="ssh: Could not resolve hostname nonvalidip: Name or service not known"
if [ $test = $check ]; then
echo "Please enter a valid ip"
fi

但是 $test 是空的,我怎样才能读取 ssh 的输出并将其作为测试变量?

最佳答案

假设您正在尝试运行 shell 脚本以通过 SSH 通过系统获得访问权限,然后如果该连接成功则运行命令。要做到这一点,您可以做很多事情,这些事情比尝试使解释更少的语言工作要简单得多。我强烈建议解决第一个问题是在脚本中制作一个较小的脚本。比如做这样的事情:

ssh user@known_address << EOF - 这将启动 session 并保持其下的所有内容运行,直到达到 EOF

如果您也在 Linux 行业,使用它可能对您以后有所帮助。该脚本应如下所示:

ssh user@known_address << EOF scp /etc/passwd USER@your_address/Path EOF - 请注意,这是您可以执行的操作的示例,但将密码文件的额外副本放在其他系统上并不是很明智。

然后,您可以简单地使用退出代码,而不是使用系统输出的精确副本。在此过程中,这可能会更有帮助。您可以收到使用 echo $? 运行的最后一条命令的错误代码

我不能保证这个脚本会工作,但这里有一个你可以做什么的例子

session() {ssh user@add << EOF; command1; command2; command3; EOF}; session; if $? == 1; echo "test failed".

Sources

https://www.shellhacks.com/ssh-execute-remote-command-script-linux/

Meaning of exit status 1 returned by linux command

https://www.shellscript.sh/functions.html

关于linux - 将输出发送到另一个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57641630/

相关文章:

bash - 在不影响 Vim 和行返回的情况下将最后执行的命令的输出捕获到变量中

linux - 如何自动打开带有命令的拆分终端

python - 同步两个不同的进程同时开始

c - linux symlink()函数在绝对路径上损坏

linux - 在 QEMU 中为 NVMe 设置 4k block 大小

linux - 获取 bash 脚本来更新父 shell 的环境

bash - 如何在 Mac OS 中使用脚本检测文件是别名还是原始文件

linux - 找不到 `jobs` 命令列出的进程

c - 中断和调度程序

linux - jenkins build - 尝试执行包含 ssh 命令的 shell 命令