脚本找不到文件
问题描述:
我试图在Mac/Linux机器上运行名为myscript.command
的脚本。脚本找不到文件
#!/bin/sh
echo 'Starting'
chmod 777 ./myfile
的问题是,当我到达chmod
部分我得到这样的输出:
chmod ./myfile: No such file or directory
但两者myscript.command
和myfile
在同一个文件夹中。
编辑
看来,当我启动脚本脚本的位置不被保留。我如何保存位置?
该脚本通过在UI中双击启动。
答
$ 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
该文件在那里吗? – user2182349
是的,文件在那里。 –
我认为如果您也从该目录共享“ls -l”的输出,这会很有帮助。请注意,脚本将无视您启动它的目录,但会检查文件的“当前”目录。 – RVT