Windows bat到linux shell脚本转换问题

Windows bat到linux shell脚本转换问题,shell,batch-file,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 -kee

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

我唯一需要改变的是你的例子中的#!线路到#/垃圾箱/垃圾箱


打印出http://localhost:20013/WSInicioDeSesion?wsdlabcd'对我来说

wsimport-wsimport-keep-s$URL/WSInicioDeSesion?wsdl
可能应该是
wsimport-keep-s“${URL}”
,尽管我不能完全复制您正在做的事情。变量引用后面的
/
表示您正在替换文本。我总是用
${}
符号来指定变量,以避免类似的事情。

您对问题的最后一次编辑似乎终于揭示了问题的实际原因

您的shell脚本可能与Windows样式的换行符一起保存,换行符是
\r\n
,即回车控制字符后跟新行控制字符。Unix world正在使用的只是
\n
。因此,实际存储到
URL
变量的值可能不仅仅是
http://localhost:20013
但是
http://localhost:20013^R
(其中,
^R
代表回车字符)。这也解释了
echo${URL}abcd
打印为
abcd://localhost:20013
:值
${URL}
末尾的CR字符将光标移动到行的开头,而
abcd
仅覆盖初始的
http


我认为,如果您在几乎所有流行的Linux文本编辑器中打开脚本,您应该能够将这些额外的
\r
符号视为
^r
s。至少,我记得在Midnight Commander的内置编辑器和其他一些控制台编辑器中看到的是,当打开从Windows机器传输的文本文件时。当然,你也应该能够删除这些字符(在你的情况下,你应该这样做来解决问题)。

所以我认为这也会发生,但我不知道为什么我会得到这样一个奇怪的结果,我在一个有windows 7主机的虚拟机中,在fedora下运行。这就是说,我像这样执行sh“bash nameoffile.sh”,这就是我得到的奇怪结果。我还尝试了另一行:rm./ws/*.class,以删除所有生成的类文件,但当我从执行sh文件的位置看到它时,它说没有这样的目录。try
#/而是bin/bash
/bin/sh
可能或至少与旧的Bourne Shell兼容,后者没有ksh或bash中的所有语法功能。祝大家好运。不,还是不行。此外,我甚至不能做ls-l,或者rm,它总是说找不到命令,这是愚蠢的,有没有其他方法可以实现相同的结果而不使用shell脚本?同样的结果,如果我手动编写“localhost:20013”,它会工作。但我必须在另外10行中完成此操作,因此每次更改某些内容时都不能手动更改每行内容。你是对的,我在阅读此内容之前就想好了,再次手动编写脚本,并且成功了,我一直在获得额外的\r,谢谢:)
#!/bin/sh

#here i set the path variable, not important

URL="http://localhost:20013/WSInicioDeSesion?wsdl"
echo ${URL}abcd