如何在macOS的.command文件中引用当前目录并创建相对路径文件?
实现任意文件夹下创建相对路径txt的.command脚本
当然可以实现这个需求!你之前的命令失效,核心原因是macOS的.command文件默认会从你的用户主目录(~/)启动,而不是它所在的目标文件夹,直接执行echo命令只会把文件创建在主目录里,不是你想要的位置。
下面是完整的解决方案:
正确的脚本内容
把以下代码保存为CreateLog.command(文件名可以自定义):
#!/bin/bash # 定位到脚本所在的文件夹(核心步骤) SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) cd "$SCRIPT_DIR" # 在当前文件夹创建并写入log.txt echo -e "write this to the log" >> log.txt # 可选:如果想运行后保持终端窗口打开,添加这行 read -p "操作完成,按任意键关闭窗口..."
关键细节解释
#!/bin/bash:必须放在脚本第一行,指定用bash解释器执行,否则可能出现兼容性问题SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd):这行是解决问题的核心——它会获取脚本所在的绝对路径,不管你把脚本放到哪个文件夹,都能精准定位到该目录cd "$SCRIPT_DIR":切换到脚本所在的文件夹,这样后续的文件操作就都在这个目录下进行了echo -e "write this to the log" >> log.txt:如果log.txt不存在会自动创建,>>表示追加内容,如果你想每次覆盖内容可以换成>
让脚本可执行
保存好脚本后,必须给它添加可执行权限才能运行:
- 打开终端,把脚本拖进终端窗口(或者用
cd命令导航到脚本所在文件夹) - 执行命令:
chmod +x CreateLog.command
之后你把这个脚本放到任意文件夹,双击运行,就能在该文件夹下生成log.txt文件了!
为什么你之前的命令不生效?
cd .:这行只是切换到当前工作目录,但默认工作目录是你的用户主目录,不是脚本所在的文件夹,所以完全起不到作用cd pwd .:这是语法错误,pwd是命令,要获取它的输出需要用$(pwd)包裹,但即使写成cd $(pwd),也只是切换到当前工作目录,还是解决不了脚本启动路径的问题
内容的提问来源于stack exchange,提问作者JCraine
相关产品推荐
相关产品推荐

