双击执行Shell删除脚本提示文件不存在,如何修改指定执行路径?
解决Shell脚本双击执行时工作目录不对的问题
嗨,这个问题我太熟悉啦!当你双击运行Shell脚本时,系统默认的工作目录并不是脚本所在的文件夹,而是你的用户主目录(比如/home/你的用户名),这就导致脚本里的rm命令去错误的目录找文件,自然会报“No such file or directory”啦。
给你两种靠谱的解决办法,首推第一种,灵活性拉满:
方法一:强制脚本切换到自身所在目录
在脚本最开头加上一段代码,先获取脚本的绝对路径,再切换到该目录,之后再执行删除命令。修改后的完整脚本如下:
#!/bin/bash # 获取脚本所在的绝对路径,避免相对路径的坑 SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd) # 切换到脚本所在的目录 cd "$SCRIPT_DIR" # 执行你的删除操作 rm *.ext1 *.ext2 file1.txt file2.txt
简单解释下这段代码:
${BASH_SOURCE[0]}:会返回当前脚本的完整路径(不管是双击还是终端运行)dirname:提取路径里的目录部分(去掉脚本文件名)cd "$(dirname ...)" && pwd:进入这个目录后输出绝对路径,确保路径是正确的&> /dev/null:把可能的错误输出(比如目录不存在)屏蔽掉,避免干扰
方法二:给文件指定绝对路径(不推荐,灵活性差)
如果你不想改目录,也可以直接把要删除的文件换成绝对路径,比如:
#!/bin/bash rm /path/to/your/script/folder/*.ext1 /path/to/your/script/folder/*.ext2 /path/to/your/script/folder/file1.txt /path/to/your/script/folder/file2.txt
但这种方法的问题是,一旦你移动了脚本的位置,就得手动修改路径,非常麻烦,所以还是第一种方法更香。
最后再提一句:如果脚本还没加执行权限,记得用chmod +x 你的脚本名.sh给它加上,不过你终端能正常运行的话应该已经弄好啦。
内容的提问来源于stack exchange,提问作者philus
相关产品推荐
相关产品推荐

