我有以下Windows批处理文件:
set url=http://localhost:20013
wsimport -keep -s . %url%/WSInicioDeSesion?wsdl
rm ws/*.class
当我尝试制作它的shell脚本版本时,它会失败。这是我的shell脚本:
#!bin/sh
#here i set the path variable, not important
URL="http://localhost:20013"
wsimport -keep -s . $URL/WSInicioDeSesion?wsdl
然而,似乎变量替换是错误的,如果我尝试回显:${URL}abcd
它打印abcd://localhost:20013
,发生了什么?
编辑:抱歉我复制/粘贴第二部分错了,这就是它的样子。
所以我也尝试了类似rm {$ URL} .txt的内容,令我惊讶的是它无法找到文件'http:// localhost:20013 \ r.txt \ r \ n',为什么会添加每个人都有回车?可能是编辑吗?
答案 0 :(得分:1)
您对问题的最后编辑似乎终于揭示了问题的实际原因。
您的shell脚本可能已保存为Windows样式的换行符,即\r\n
,即Carriage Return控制字符后跟New Line控件字符。 Unix世界只使用\n
。因此,实际存储到URL
变量的值可能不仅仅是http://localhost:20013
而是http://localhost:20013^R
(其中^R
代表回车符号)。这也导致echo ${URL}abcd
打印为abcd://localhost:20013
:${URL}
值末尾的CR字符将光标移动到行的开头,而abcd
只是覆盖最初的http
。
我认为如果您在几乎任何流行的Linux文本编辑器中打开脚本,您应该能够将这些额外的\r
符号视为^R
。好吧,至少,这是我记得在Midnight Commander的内置编辑器和其他一些控制台编辑器中看到的,当打开从某些Windows机器传输的文本文件时。当然,您也应该能够删除这些字符(在您的情况下应该这样做以解决问题)。
答案 1 :(得分:0)
我唯一需要改变的是#!行到#!/ bin / sh
#!/bin/sh
#here i set the path variable, not important
URL="http://localhost:20013/WSInicioDeSesion?wsdl"
echo ${URL}abcd
为我打印'http:// localhost:20013 / WSInicioDeSesion?wsdlabcd'
答案 2 :(得分:0)
wsimport wsimport -keep -s . $URL/WSInicioDeSesion?wsdl
可能应该是wsimport -keep -s "." "${URL}"
,但我无法复制你正在做的事情。变量引用后面的/
可能意味着您要替换文本。我总是使用${}
符号指定变量以避免这样的事情。