我必须向网址发送GET请求
http://localhost:8082/email-bulk?customer=Martin+Thoma&handler_pid=foo+f0a474c5-3cb1-4872-8689-c65cedb15bff&format_string=%7Breceived%3A%25y%25m%25d%7D+%7Bfoo%7D+%7Bfoo%7D+%7Bfoo%7D+%7Bfoo%7D%7Bfile_extension%7D&minutes_email=2
每分钟都有。所以我将crontab条目设置为
* * * * * /usr/bin/curl --silent "http://localhost:8082/email-bulk?customer=Martin+Thoma&handler_pid=foo+f0a474c5-3cb1-4872-8689-c65cedb15bff&format_string=%7Breceived%3A%25y%25m%25d%7D+%7Bfoo%7D+%7Bfoo%7D+%7Bfoo%7D+%7Bfoo%7D%7Bfile_extension%7D&minutes_email=2"
但是服务器没有收到任何请求。
使用
* * * * * /usr/bin/curl --silent http://localhost:8082/email-bulk?customer=Martin+Thoma&handler_pid=foo+f0a474c5-3cb1-4872-8689-c65cedb15bff&format_string=%7Breceived%3A%25y%25m%25d%7D+%7Bfoo%7D+%7Bfoo%7D+%7Bfoo%7D+%7Bfoo%7D%7Bfile_extension%7D&minutes_email=2
它收到
的请求http://localhost:8082/email-bulk?customer=Martin+Thoma
如何在不使用外部脚本的情况下完成此工作?
答案 0 :(得分:1)
不使用引号并使用&
转义%
和\
似乎有效。但我仍然想知道为什么使用引号不起作用/哪些字符需要转义以及为什么。
(所以我不接受这个答案)
答案 1 :(得分:1)
用单引号替换双引号,shell不会尝试解析网址。
答案 2 :(得分:0)
如果您不使用引号,您的shell会将您的字符串解释为由&
拆分的一组命令,并在后台&
之前执行所有操作。 (除非你逃避角色\&
)
要测试此功能,请在终端中尝试此操作
$ echo 1 & echo 2
输出类似于:
$ echo 1 & echo 2
[1] 2188
2
1
[1] + done echo 1
在您的示例中,将在后台执行的命令部分将是:
/usr/bin/curl --silent http://localhost:8082/email-bulk?customer=Martin+Thoma &
但是,因为字符串的其余部分不是有效命令,您将收到错误,例如:
$ echo 1 & foo
[1] 2244
1
[1] + done echo 1
zsh: command not found: foo
来自男人bash:
如果命令由控制操作符&终止,则shell在子shell中在后台执行命令。
因此,通过使用引号,您的shell不会解析字符串,例如:
$ echo "1 & foo"
1 & foo
取决于你的shell要逃脱的内容以及什么不是,请查看此答案以获取更多信息:https://unix.stackexchange.com/a/296147/53084