Pat*_*ick 23 bash return-value variable-assignment
我目前正在编写一个bash脚本,使用GoogleCL将视频文件加载到YouTube .
正如我在循环中上传内容(因为可能有多个视频文件)我想检查每个文件是否已成功上传,然后再上传下一个文件.
该命令google youtube post --access unlisted --category Tech $f(其中$ f表示文件)输出一个字符串,告诉我上传是否成功.
但我不知道如何将"返回字符串"重定向到变量中以检查成功.
这就是我的意思:
for f in ./*.ogv ./*.mov ./*.mp4
do
    if [[ '*' != ${f:2:1} ]]
    then
        echo "Uploading video file $f"
        # How to put the return value of the following command into a variable?
        google youtube post --access unlisted --category Tech $f > /dev/null
        # Now I assume that the output of the command above is available in the variable RETURNVALUE
        if [[ $RETURNVALUE == *uploaded* ]]
        then
            echo "Upload successful."
        else
            echo "Upload failed."
        fi
    fi
done
Run Code Online (Sandbox Code Playgroud)
有谁能够帮我?
fal*_*tro 21
我的猜测是你也可以依赖google命令的错误代码(我假设如果上传失败就会返回错误,但你应该仔细检查一下).
for f in ./*.ogv ./*.mov ./*.mp4; do
  if [[ '*' != ${f:2:1} ]]; then
    echo "Uploading video file $f"
    if google youtube post --access unlisted --category Tech "$f" > /dev/null
    then
      echo "Upload successful."
    else
      echo "Upload failed."
    fi
  fi
done
Run Code Online (Sandbox Code Playgroud)
一个常见的误解是,如果想要一个括号括起来的表达式来评估,如果总是接受一个命令并检查错误状态,那就不是这样; 通常此命令是[别名test,用于计算表达式.(是的,如果没有一个优化的快捷方式让它在bash中变得更快,我会感到惊讶,但从概念上讲它仍然是真的).
捕获输出是通过反引号完成的,就像这样
result=`command argument a b c`
Run Code Online (Sandbox Code Playgroud)
或使用 $()
result=$(command argument a b c)
Run Code Online (Sandbox Code Playgroud)
但在这种情况下使用错误代码可能更好.
编辑:  
你的函数中有一个有趣的东西..我一开始并没有注意到,但如果启用nullglobshell选项可以避免(./*.mov如果没有文件,这将扩展为空字符串).另外,$f如果您的文件名包含空格,请引用它或它会中断
shopt -s nullglob
for f in ./*.ogv ./*.mov ./*.mp4; do
  echo "Uploading video file $f"
  if google youtube post --access unlisted --category Tech "$f" > /dev/null
  then
    echo "Upload successful."
  else
    echo "Upload failed."
  fi
done
Run Code Online (Sandbox Code Playgroud)
HTH.