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.
Hãy thử thay thế không gian với "\" – spicavigo
@spicavigo Cố gắng đó đã không có kết quả:/ – Shtong
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