gpt4 book ai didi

linux - Shell 脚本文件访问

转载 作者:太空宇宙 更新时间:2023-11-04 04:46:27 25 4
gpt4 key购买 nike

我在我的 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: Could not open file "temp.prj".

好像有些权限有问题。该脚本正在创建一个文件,并且该文件中有正确的内容。与运行 sudo 相同。

有什么想法吗?

最佳答案

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

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

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

清理之后,尤其是一些基本的错误处理后,调试无疑会更容易。

#!/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

关于linux - Shell 脚本文件访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33826982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com