2

次の Windows バッチ ファイルがあります。

set url=http://localhost:20013

wsimport -keep -s . %url%/WSInicioDeSesion?wsdl
rm ws/*.class

シェル スクリプト バージョンを作成しようとすると、失敗します。これは私のシェルスクリプトです:

#!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何が起こっているのですか?

編集:申し訳ありませんが、2番目の部分を間違ってコピー/貼り付けしました。これがどのように見えるかです。

だから私も rm {$URL}.txt のようなものを試してみましたが、驚いたことに、ファイル 'http://localhost:20013\r.txt\r' が見つかりませんでした。なぜ改行が追加されるのですかすべての文に対して?編集者でもいいですか?

4

3 に答える 3

1

質問に対する最後の編集により、問題の実際の原因がついに明らかになったようです。

シェル スクリプトは、Windows スタイルの改行で保存されている可能性があります\r\n。つまり、キャリッジ リターン制御文字の後に改行制御文字が続きます。Unix の世界では\n. URLそのため、変数に実際に格納される値は、 (キャリッジ リターン文字を表す)http://localhost:20013だけではない可能性があります。これは、値の末尾にある CR 文字がカーソルを行の先頭に移動し、最初の.http://localhost:20013^R^Recho ${URL}abcdabcd://localhost:20013${URL}abcdhttp

ほとんどの一般的な Linux テキスト エディターでスクリプトを開くと、これらの余分な\rシンボルが^Rs として表示されるはずです。少なくとも、一部の Windows マシンから転送されたテキスト ファイルを開くときに、Midnight Commander のビルトイン エディタやその他のコンソール エディタで見たのを覚えています。もちろん、これらの文字も削除できるはずです (問題を解決するには、状況に応じて削除する必要があります)。

于 2012-10-27T18:58:08.410 に答える
0

wsimport wsimport -keep -s . $URL/WSInicioDeSesion?wsdlおそらくwsimport -keep -s "." "${URL}"、あなたがしていることを正確に再現することはできませんが。次の/変数参照は、テキストを置き換えることを意味する場合があります。${}そのようなことを避けるために、私は常に表記法で変数を指定します。

于 2012-10-26T18:25:58.223 に答える
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」を出力します

于 2012-10-26T18:23:03.857 に答える