shell - 为什么我的 shell 脚本将代码打印为输出的一部分
问题描述
#!/bin/bash
haf()
{
sshpass -p "$1" ssh -tt -o StrictHostKeyChecking=no "$2"@"$3" <<'SSH_EOF'
echo "request msha actions status" | /opt/tel/vs/ns/current/bin/ns_cli > txt1
tr -s " " < txt1 > txt2
cut -d " " -f 2 txt2 > txt3
var1=$(<txt3)
if [ "$var1" = "MASTER" ]
then
var2=1
elif [ "$var1" = "SLAVE" ]
then
var2=2
else
var2=3
fi
echo $var2 > txt4
rm txt1 txt2 txt3
logout
SSH_EOF
sshpass -p "$1" scp "$2"@"$3":~/txt4 .
var2=$(<txt4)
sshpass -p "$1" ssh -tt -o StrictHostKeyChecking=no "$2"@"$3" <<'SSH_EOF'
rm txt4
logout
SSH_EOF
rm txt4
return $var2
}
haf "$1" "$2" "$3"
FL1=$?
输出
admin@tel:~$
/vs/ns/current/bin/ns_cli > txt1 request msha actions status" | /opt/tel
admin@tel:~$ tr -s " " < txt1 > txt2
admin@tel:~$ cut -d " " -f 2 txt2 > txt3
admin@tel:~$ var1=$(<txt3)
admin@tel:~$
admin@tel:~$ if [ "$var1" = "MASTER" ]
> then
> var2=1
> elif [ "$var1" = "SLAVE" ]
> then
> var2=2
> else
> var2=3
> fi
admin@tel:~$ echo $var2 > txt4
admin@tel:~$ rm txt1 txt2 txt3
admin@tel:~$ logout
Connection to 192.168.66.39 closed.
admin@tel:~$ rm txt4
admin@tel:~$ logout
Connection to 192.168.66.39 closed.
FL1=1
正确/期望的输出只有 FL1=1
,没有别的。
我在 Ubuntu 14.04.1 中运行这个脚本
解决方案
当您将-tt
参数传递给 ssh 并且不传递任何显式远程命令以运行时,这会导致在远程端运行交互式 shell。
交互式 shell 打印提示,并将用户正在运行的命令回显给该用户。
所以,有两件事——任何一个都应该解决这个问题,但最好同时做两件事:
停止使用
-tt
,除非您有特定的、令人信服的理由来使用它。bash -s
作为要运行的显式远程命令传递。(这也保证了远程 shell 是 bash,而不是/bin/sh
,因此仅 bash 的语法将起作用)。
推荐阅读
- javascript - 反应js。不能'获取未定义的值,用户的显示名称。我已使用道具来使用此文件中的用户状态,但它无法访问任何用户数据
- python - 如何在 MySQL 中复制 pandas 函数?
- python - 如何在 python 中使用正则表达式从字符串中获取某人的姓名?
- r - 如何在字符串中删除初始句点之前的文本、初始句点本身和最后句点之后的文本?
- c - 使用 (*variable).member 与 *variable.member 取消引用结构 Struct_type 的成员
- windows - PyCharm 的两个实例
- css - CSS 性能,#id vs .class vs [^regex$] vs 选择器
- python - 将一列'int'转换为'string'
- spring - Spring MVC - Dispatcher Servlet 找不到任何页面
- c++ - clang:发射是什么意思?