脚本找不到文件

脚本找不到文件

问题描述:

我试图在Mac/Linux机器上运行名为myscript.command的脚本。脚本找不到文件

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

的问题是,当我到达chmod部分我得到这样的输出:

chmod ./myfile: No such file or directory 

但两者myscript.commandmyfile在同一个文件夹中。

编辑

看来,当我启动脚本脚本的位置不被保留。我如何保存位置?

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

+0

该文件在那里吗? – user2182349

+0

是的,文件在那里。 –

+0

我认为如果您也从该目录共享“ls -l”的输出,这会很有帮助。请注意,脚本将无视您启动它的目录,但会检查文件的“当前”目录。 – RVT

$ 0

为了改变当前的工作目录到脚本的目录,把下面的命令家当之后line:

cd "$(dirname "$0")" 

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

检测当前的工作目录

可以使用pwd命令来获得当前工作目录。如果你实际上是运行bash(我不知道,因为在你的代码点/bin/sh的家当),你可以使用内置的$PWD变量:

PWD 集科当前工作目录cd内建。

存储脚本的路径传递到变量

另外,保存的目录路径到一个变量,并且在脚本中使用它,比如:

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

双引号

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

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

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

你可能会开始这样的事情,太..

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