2011-11-07 32 views
5

Tôi phải viết một tập lệnh tạo và thực thi lệnh có số lượng đối số chứa tên tệp. Những tên tệp này có thể chứa khoảng trắng và mọi thứ phải hoạt động tốt khi có hoặc không có dấu cách.Thực hiện lệnh được tạo động với dấu cách trong tập lệnh shell

Ví dụ, điều này tạo ra lệnh có thể trông như thế này:

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

Nếu tôi sử dụng một lệnh cứng mã hoá và thực hiện nó tất cả chạy tốt, có và không có khoảng trắng. Tuy nhiên, nếu tôi tạo văn bản lệnh trong biến chuỗi và thực thi nội dung chuỗi, có vẻ như lệnh không đưa dấu ngoặc kép vào tài khoản, chỉ sử dụng phần đầu tiên của tệp:

Kịch bản (đơn giản hóa, chỉ cần tưởng tượng chuỗi lệnh được tạo ra sử dụng quy tắc phức tạp):

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

Kết quả:

$ ./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' 

tôi đã cố gắng điều khác nhau, chuyển đổi dấu ngoặc kép phong cách, sử dụng những thứ như exec, nhưng tôi could'nt được điều này để làm việc .

Bất kỳ trợ giúp sẽ được đánh giá

Cảm ơn

Lưu ý: Tôi nên thêm tất cả các thử nghiệm này được thực hiện trên Cygwin. Nó có thể là quan trọng liên quan đến cú pháp đường dẫn.

+0

Hãy thử thay thế không gian với "\" – spicavigo

+0

@spicavigo Cố gắng đó đã không có kết quả:/ – Shtong

+0

bạn có thể trao đổi trên một số dbl-trích dẫn cho dấu nháy đơn ?, tức là lệnh = "curl - url-urlencode 'param_value @/tmp/một số thư mục/data.txt' www.someurl.com" ... Chúc may mắn! – shellter

Trả lời

0

Các bạn đã thử:

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

Tôi đã làm, nhưng xin lỗi, cùng một kết quả! – Shtong

+0

@Shtong: Tôi quên xóa dấu thoát của dấu ngoặc kép thứ hai. Thay đổi nó trong mã của tôi bây giờ. – flesk

+0

Ồ, không thấy lỗi của bạn, nhưng có hoặc không nhầm lẫn, lỗi là như nhau :) – Shtong

4

Bạn nên sử dụng eval:

eval "$command" 
+0

Không may mắn. Lệnh này không hoạt động, nhưng vì nó tìm kiếm curl trong thư mục hiện tại chứ không phải trong thư mục bin. (nói/home/Shtong/curl không tồn tại) – Shtong

+0

Hoạt động như một sự quyến rũ đối với tôi =) –

Các vấn đề liên quan