2011-11-07 14 views
5

ファイル名を含むさまざまな引数を持つコマンドを生成して実行するスクリプトを作成する必要があります。これらのファイル名には空白が含まれていてもかまいません。例えばシェルスクリプトにスペースを入れて動的に作成したコマンドを実行する

、このコマンドは次のように見えるかもしれ生成:私はハードコーディングされたコマンドを使用して、それを実行した場合

curl --data-urlencode "[email protected]/tmp/some folder/data.txt" http://www.someurl.com 

それはすべてで、スペースなしで、細かい動作します。しかし、文字列変数にコマンドテキストを作成し、文字列の内容を実行すると、ファイルの最初の部分だけを使用して引用符を使用しないようです。

スクリプトコマンド文字列は)複雑なルールを使用して作成されます。

#!/bin/sh 
#prepare 
command="curl --data-urlencode \"[email protected]/tmp/some folder/data.txt\" www.someurl.com" 
#execute 
$command 

結果:

$ ./test.sh 
Warning: Couldn't read data from file ""[email protected]/tmp/some", this makes an 
Warning: empty POST. 
curl: (6) Couldn't resolve host 'folder' 

は私がexecのようなものを使用して、引用符のスタイルを切り替え、別のものを試してみましたが、私は仕事にこれを取得could'nt 。

すべてのヘルプは

おかげ

注意をいただければ幸いです:私はこのすべてのテストは、Cygwinの上で行われる追加する必要があります。パス構文に関しては重要です。

+0

"\" とスペースを交換してみ – spicavigo

+0

@spicavigoが既に無い結果とすることをしようとしました:/ – Shtong

+0

あなたには、いくつかを交換することができます一重引用符のためのdbl-quotes、つまりcommand = "curl --data-urlencode 'param_value @/tmp/some folder/data.txt' www.someurl.com" ...幸運を祈る! – shellter

答えて

0

あなたが試してみました:

command='curl --data-urlencode "[email protected]/tmp/some\ folder/data.txt" www.someurl.com' 
+0

私はしましたが、申し訳ありませんが、同じ結果! – Shtong

+0

@ Shtong:二重引用符のエスケープを削除するのを忘れました。私のコードでこれを変更しました。 – flesk

+0

ああ、あなたの間違いを見ていないが、間違いの有無にかかわらず、同じです:) – Shtong

4

をあなたはevalのを使用する必要があります。

eval "$command" 
+0

運がいいです。このコマンドは機能しませんが、binディレクトリではなく現在のディレクトリでカールを探します。 (/ home/Shtong/curlは存在しません) – Shtong

+0

私にとっては魅力的です=) –

関連する問題