Shell脚本文件访问

时间:2015-11-20 12:39:20

标签: linux bash shell

我在我的mac上编写了一个shell脚本。以下代码:



    echo [objects] > temp.prj
    echo $1.obj >> temp.prj
    chmod 777 temp.prj
    wla-65816 -o $1.asm $1.obj
    wlalink -vr temp.prj $1.fig
    rm $1.obj
    rm temp.prj

问题是程序wlalink给我一个错误信息:

  

LOAD_FILES:无法打开文件“temp.prj”。

似乎某些权利存在问题。该脚本正在创建一个文件,文件中有正确的内容。与运行sudo相同。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您所描述的错误听起来并不像shell会产生的错误,但加载该文件的唯一工具是wlalink。如果您单步执行脚本行,在shell提示符下键入每个行,是否会出现相同的错误?如果是这样,在哪一行?

除此之外,您的脚本存在许多质量问题,您应该修复这些问题,其结果可能会使调试或预测变得更容易。

  1. 使用shebang。您的计算机上有多个shell解释器,在编写脚本时,最好指定要解释脚本的脚本。添加像#!/bin/sh这样的行作为脚本的第一行。
  2. 引用您的变量和任何特殊字符。例如,方括号用作“pattern matching”的一部分。如果你想确保你的字符串是字面意思,请使用文字(单个)引号,即echo '[objects]' > temp.prj
  3. 测试成功。如果脚本中的任何步骤失败,脚本会盲目地继续运行命令直到结束,即使它们确保失败。在脚本顶部附近添加set -e以获取此版本的简单版本。
  4. 不要使用愚蠢的权限。 chmod 777表示该文件可以被世界读取,写入和执行。这不是可执行文件。它当然不需要是世界可写的。想想你需要什么,并将你的文件权限设置为不超过这个。
  5. 清理后,尤其是一些基本的错误处理,调试无疑会更容易。

    #!/bin/sh
    
    if [ -z "$1" ]; then
        echo "ERROR: I need an option." >&2
        exit 1
    fi
    
    # Debugging
    set -e    # stop on error
    set -x    # display our commands
    
    echo "[objects]" > temp.prj
    echo "$1.obj" >> temp.prj
    chmod 640 temp.prj
    wla-65816 -o "$1.asm" "$1.obj"
    wlalink -vr temp.prj "$1.fig"
    rm -f "$1.obj" temp.prj