【发布时间】:2017-08-06 01:45:43
【问题描述】:
我有以下情况,我尝试使用以下脚本来访问我的脚本之一中指定 SSH 端口上的 jenkins 环境。
但是由于某种原因,该变量与该变量有一些奇怪的行为。
回显变量时,它看起来很正常。 在字符串中回显变量时,除非它位于字符串的末尾,否则不会显示它 在 ssh 命令中使用变量时,它会弄乱整个 ssh 命令。
我错过了什么?我可以做些什么来进一步排除故障?
$ ssh_port=$(curl -vsL http://localhost/login 2>&1 | grep 'X-SSH-Endpoint' | cut -d':' -f 3)
$ echo $ssh_port
44149
$ echo "${ssh_port} jenkins port"
jenkins port
$ echo "Jenkins port ${ssh_port}"
Jenkins port 44149
$ ssh -p $ssh_port localhost
'ad port '44149
更新:
按照 cmets 中的建议,我尝试使用 2 个命令进行故障排除。
$ printf %s "$ssh_port" | xxd
00000000: 3434 3134 390d 44149.
$ od -c <<<"$ssh_port"
0000000 4 4 1 4 9 \r \n
0000007
有什么方法可以在没有这些奇怪字符的情况下实现我想要的吗?
【问题讨论】:
-
您的变量中可能包含
\r。使用declare -p ssh_port -
...如果
declare的输出看起来很乱,那么这就是建议回车的更多证据。您也可以使用od -c <<<"$ssh_port"来显示变量中的字符。 -
printf %s "$ssh_port" | xxd也可以提供帮助... -
你可以在参数扩展中去掉
\r,虽然它不是很明显:"${ssh_port//$'\r'}"(或者,要删除 CR+LF 对,"${ssh_port//$'\r\n'}")。 -
请参阅
bashtag wiki 获取有关处理 DOS 行尾(CRLF,也用作网络协议的一部分)的建议。
标签: linux bash jenkins ssh environment-variables