终端可运行的curl命令在Bash脚本中失效问题求助
解决Bash脚本中curl命令失效的问题
嘿,我一眼就揪出你脚本里的核心问题了——你只是把curl命令赋值给了cmd变量,但从来没有执行这个命令!这就像你把指令写在便签上却不递给电脑去执行一样,当然没效果啦。除此之外还有几个小细节需要调整,下面一步步给你搞定:
核心问题与修正点
- 必须执行curl命令:你之前只做了
cmd='curl ...',但要让命令跑起来,得用$cmd调用它,或者直接写命令而不是存在变量里(后者更推荐,避免引号转义坑)。 - URL参数的转义问题:你用了HTML实体的
&,在Bash里应该直接用&作为URL参数分隔符,虽然终端可能能容错,但脚本里用原始符号更稳妥(记得把整个URL用双引号括起来,防止&被解析成后台运行符)。 - 脚本逻辑优化:重复写curl命令太麻烦,封装成函数更易维护,还能避免出错。
修正后的完整脚本
#!/bin/bash # 封装发送状态的函数,传入状态值即可 send_status() { local target_status=$1 # 去掉-s参数可以看到curl的详细输出,方便调试,调试完再加回去 curl -w "%{http_code}" "https://mysite/page.php?id=43982934&send=Yhd6yryr87237846dh&status=${target_status}" # 加个换行让输出更整洁 echo } # 先发送状态1,标记任务开始 send_status 1 # 判断是否需要执行ffmpeg转换 if [ "$var" != "$extension" ]; then # 执行ffmpeg转换 ffmpeg -i /var/www/html/temp/name.extension -c copy /var/www/html/temp/namefile.extension # 检查ffmpeg是否执行成功,只有成功才发送状态2 if [ $? -eq 0 ]; then echo "ffmpeg转换完成,发送状态2" send_status 2 else echo "ffmpeg转换失败,跳过状态2发送" fi else echo "无需执行转换,跳过状态2" fi
额外调试技巧
- 暂时去掉curl的
-s参数,这样能看到curl的详细请求和响应信息,方便排查是网络问题还是参数问题。 - 用
bash -x your_script.sh执行脚本,开启调试模式,能看到每一步的执行过程,包括curl命令的实际参数,帮你快速定位问题。
内容的提问来源于stack exchange,提问作者tidpe




