脚本无法找到文件

时间:2016-12-02 02:26:06

标签: linux bash macos shell launch

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

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

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

chmod ./myfile: No such file or directory

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

修改

当我启动脚本时,似乎没有保留脚本的位置。我该如何保留位置?

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

2 个答案:

答案 0 :(得分:0)

<强> $ 0

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

cd "$(dirname "$0")"

$0变量扩展为脚本名称(脚本的路径),dirname返回脚本目录的路径。

检测当前工作目录

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

  

PWD        由cd内置设置的当前工作目录。

将脚本的路径存储到变量

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

dir="$(cd $(dirname "$0"); pwd)"
chmod 770 "$dir/somefile"

双引号

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

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

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

答案 1 :(得分:-1)

你也可以开始这样的事情。

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