bash - 无法验证 SSH 的结果
问题描述
我正在通过 SSH 验证文件与主机 ubunty 系统的匹配,并且 if 语句未正确处理结果。
export FILENAME=test.txt
export NUM=$(ssh -t ubuntu@192.168.XXX.XXX "ls ~/Documents/ | grep '$FILENAME' | wc -l")
echo "Received value: $NUM"
if [ $NUM == 0 ]; then
echo "If processed as: 0"
else
echo "If processed as: 1"
fi
所以如果$FILENAME
存在,我得到以下输出
Connection to 192.168.XXX.XXX closed.
Received value: 1
If processed as: 1
如果没有,我得到以下一个
Connection to 192.168.XXX.XXX closed.
Received value: 0
If processed as: 1
为什么会发生这种情况?我得到了错误的格式值吗?如果我在 if 语句之前强制NUM=0
或NUM=1
它得到正确处理。
解决方案
if [ $NUM == 0 ]; then
应该按预期工作。(有关 SO 的更多信息)
用于cat -v
显示输出中的所有不可见字符;
NUM=$(ssh -t ubuntu@192.168.XXX.XXX "ls ~/Documents/ | grep '$FILENAME' | wc -l")
echo "NUM: ${NUM}" | cat -v
#Prints; NUM: 0^M
不可见的^M
字符弄乱了if
声明。通过管道从结果中删除 iftr -d '\r'
export FILENAME=test.txt
export NUM=$(ssh -t ubuntu@192.168.XXX.XXX "ls ~/Documents/ | grep '$FILENAME' | wc -l" | tr -d '\r')
echo "Received value: $NUM"
if [ $NUM == 0 ]; then
echo "If processed as: 0"
else
echo "If processed as: 1"
fi
更多^M
信息;
推荐阅读
- python-3.x - 如何使用 python 替换命令中的源和目标属性名称。有超过 500 种不同的属性可以替换
- php - Codeigniter Ajax Dependent Dropdown 在 foreach 语句中不起作用
- bash - Postgres 函数创建中 $$ 双美元的语法错误
- android - Mac 上没有 Android Studio 的 AVD Manager GUI
- javascript - Grid组件的嵌套单文件组件问题
- javascript - 角度反应形式在另一个 FormGroup 中的另一个 FormArray 中的嵌套 FormGroup 中添加 FormArray
- css - 如何使用 webpack 缩小单个 css 文件?
- javascript - 如何在另一个对象数组上调用值
- shell - pm2 stop id 命令在詹金斯管道中不起作用
- javascript - 如何在谷歌应用脚本 HTML 开发中使用 tab 键