我正在尝试在Mac / Linux计算机上运行名为myscript.command
的脚本。
#!/bin/sh
echo 'Starting'
chmod 777 ./myfile
问题在于,当我到达chmod
部分时,我得到了这个输出:
chmod ./myfile: No such file or directory
但myscript.command
和myfile
都在同一个文件夹中。
修改
当我启动脚本时,似乎没有保留脚本的位置。我该如何保留位置?
通过在UI中双击启动脚本。
答案 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