You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

终端可运行的curl命令在Bash脚本中失效问题求助

解决Bash脚本中curl命令失效的问题

嘿,我一眼就揪出你脚本里的核心问题了——你只是把curl命令赋值给了cmd变量,但从来没有执行这个命令!这就像你把指令写在便签上却不递给电脑去执行一样,当然没效果啦。除此之外还有几个小细节需要调整,下面一步步给你搞定:

核心问题与修正点

  1. 必须执行curl命令:你之前只做了cmd='curl ...',但要让命令跑起来,得用$cmd调用它,或者直接写命令而不是存在变量里(后者更推荐,避免引号转义坑)。
  2. URL参数的转义问题:你用了HTML实体的&,在Bash里应该直接用&作为URL参数分隔符,虽然终端可能能容错,但脚本里用原始符号更稳妥(记得把整个URL用双引号括起来,防止&被解析成后台运行符)。
  3. 脚本逻辑优化:重复写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

火山引擎 最新活动