【问题标题】:Error executing gcc in Z shell script在 Z shell 脚本中执行 gcc 时出错
【发布时间】:2012-07-25 02:18:33
【问题描述】:

如果我运行此脚本:(注意:已编辑以反映答案 1)

#!/usr/bin/env zsh

setopt shwordsplit

if [[ -f $1 ]]
then
   echo "will compile $1"
else
  echo "ERROR: $1 NOT found"
  exit 1
fi

gcc_options="  -c -std=c99 -Wall -Wextra  "

echo "gcc_options: ${gcc_options}"

gcc " ${=gcc_options} " " ${=1} "

if [[ $? -eq 0 ]]
then
   echo "gcc compile worked"
else
   echo "error in gcc compile"
fi

gcc "${=gcc_options}" "${=1}"

if [[ $? -eq 0 ]]
then
   echo "gcc compile worked"
else
   echo "error in gcc compile"
fi

两个编译都失败了。

输出是:


将编译 my_file.c
gcc_options: -c -std=c99 -Wall -Wextra
gcc: 错误: : 没有这样的文件或目录
gcc: 错误: : 没有这样的文件或目录
gcc:错误:my_file.c:没有这样的文件或目录
gcc:致命错误:没有输入文件编译终止。
gcc 编译错误
gcc: 错误: : 没有这样的文件或目录
gcc: 错误: : 没有这样的文件或目录
gcc 编译出错

【问题讨论】:

    标签: zsh


    【解决方案1】:

    第一个变化:

    gcc " $gcc_options $1"
    

    收件人:

    gcc "$gcc_options" "$1"
    

    如果其中一些变量包含多个单词,您可能需要打开shwordsplit(请参阅here),这也可以在每个变量的基础上完成(${=VAR})。

    gcc "${=gcc_options}" "${=1}"
    

    更新

    我弄错了,你肯定不想在$gcc_options 上加上引号,所以应该是${=gcc_options}。如果你需要引用$1 取决于$1 是否包含空格。所以应该这样做:

    gcc ${=gcc_options} $1
    

    【讨论】:

    • 感谢您的回复。我添加了引号,但仍然出现错误。我添加了“setopt shwordsplit”,但仍然出现错误。我将它修改为 "${=gcc_options} "${=1}"。那没有成功,但我的错误是不同的: gcc: error: : No such file or directory gcc: error: : No such file or目录
    • 他们提到将单独的单词放入数组中的地方:gcc_options_array=(-c -std=c99 -Wall -Wextra) 并且确实有效:gcc $gcc_options_array $1。
    • 运行这个:#!/usr/bin/env zsh setopt shwordsplit if [[ -f $1 ]] then echo "will compile $1" else echo "ERROR: $1 NOT found" exit 1 fi gcc_options =" -c -std=c99 -Wall -Wextra " echo "gcc_options: ${gcc_options}" gcc " ${=gcc_options} " " ${=1} " if [[ $? -eq 0 ]] 然后 echo "gcc compile working" else echo "error in gcc compile" fi gcc "${=gcc_options}" "${=1}" if [[ $? -eq 0 ]] 然后 echo "gcc compile working" else echo "error in gcc compile" fi
    • 给出这个输出:将编译 my_file.c gcc_options: -c -std=c99 -Wall -Wextra gcc: 错误: : 没有这样的文件或目录 gcc: 错误: : 没有这样的文件或目录 gcc :错误:assertions.c:没有这样的文件或目录 gcc:致命错误:没有输入文件编译终止。 gcc 编译错误 gcc: 错误: : 没有这样的文件或目录 gcc: 错误: : 没有这样的文件或目录错误在 gcc 编译
    • @Scooter:我可能犯了一个错误并添加了更新,这能回答你的问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多