Windows bat到linux shell脚本翻译问题

时间:2012-10-26 18:08:38

标签: shell batch-file

我有以下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',为什么会添加每个人都有回车?可能是编辑吗?

3 个答案:

答案 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}",但我无法复制你正在做的事情。变量引用后面的/可能意味着您要替换文本。我总是使用${}符号指定变量以避免这样的事情。