脚本找不到文件

Script cannot find file

我正尝试在 Mac/Linux 机器上 运行 一个名为 myscript.command 的脚本。

#!/bin/sh
echo 'Starting'
chmod 777 ./myfile

问题是,当我到达 chmod 部分时,我得到了这个输出:

chmod ./myfile: No such file or directory

但是 myscript.commandmyfile 都在同一个文件夹中。

编辑

当我启动脚本时,脚本的位置似乎没有被保留。我怎样才能保留位置?

正在通过双击启动脚本 UI。

你也可以这样开始..

#!/bin/sh
echo 'Starting'
if [ -f ./myfile ]; then
  chmod 777 ./myfile
else
  echo "File does not exist:"
  ls -l
fi

$0

为了将当前工作目录更改为脚本目录,请将以下命令紧跟在 shebang 行之后:

cd "$(dirname "[=10=]")"

[=13=] 变量扩展为脚本名称(脚本路径),dirname returns 脚本目录路径。

检测当前工作目录

您可以使用pwd命令获取当前工作目录。如果您实际上是 运行 Bash(我不确定,因为代码中的 shebang 指向 /bin/sh),您可以使用内置的 $PWD 变量:

PWD The current working directory as set by the cd builtin.

将脚本的路径存储到变量中

或者,将目录路径保存到变量中,并在脚本中使用它,例如:

dir="$(cd $(dirname "[=11=]"); pwd)"
chmod 770 "$dir/somefile"

双引号

注意双引号的使用。双引号防止重新解释特殊字符。这也是将包含空格的字符串作为单个单词传递的方法:

dir="some directory name"
cd "$dir"

没有双引号的单词被解释为单独的参数。