【问题标题】:Executing Compiler flag through bash scripting通过 bash 脚本执行编译器标志
【发布时间】:2019-05-16 01:28:21
【问题描述】:

我是 bash 脚本的新手。我需要执行dx 命令,该命令采用java 类文件并将其转换为dex 文件。这里我的java类文件是apple.class,想要输出classes.dex文件转换的命令是:

dx -JXmx256m --debug --dex --dump-to=apple.lst --output=classes.dex --dump-width=1000 apple.class

我想通过 bash 脚本执行这个命令。这是我的方法:

script.sh

filelst="apple.lst"
filedex="classes.dex"
filecl="apple.class"

flag1="--dump-to=$file1st"
flag2="--output=$filedex"
flag3="--dump-width=1000 $filecl"
dx "--debug  --dex $flag1 $flag2 $flag3"

当我运行bash script.sh 时,它会向我发送错误,显示运行 dx 命令的步骤。但是当我在没有 bash 脚本的情况下运行时,它成功执行。请帮助我在 bash 脚本中编写此命令的正确方法。

error: no command specified                                                                                                                                
usage:                                                                                                                                                     
  dx --dex [--debug] [--verbose] ...

【问题讨论】:

    标签: linux bash shell arguments


    【解决方案1】:

    dx 看到 一个 参数,而不是 --debug--dex 等的单独参数。通常的方法是不引用 $flag1 等人:

    dx --debug --dex $flag1 $flag2 $flag3
    

    但如果任何嵌入式选项包含空格,就会有其自身的问题..

    正确的解决方案是使用数组来存储多个参数。

    filelst="apple.lst"
    filedex="classes.dex"
    filecl="apple.class"
    
    flag1="--dump-to=$filelst"
    flag2="--output=$filedex"
    flag3=( --dump-width=1000 "$filecl")
    dx --debug  --dex "$flag1" "$flag2" "${flag[@]}"
    

    或者更简单

    flags=(--dump-to="$filelst" --output="$filedex" --dump-width=1000 "$filecl")
    dx --debug --dex "{$flags[@]}"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-19
      • 2022-06-30
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      • 2018-09-15
      • 2023-03-06
      相关资源
      最近更新 更多