Bash脚本运行时无法stat自身问题求助
问题原因分析与解决方案
看起来你脚本里的这条stat命令被Shell当成了单一的命令名来执行,而不是调用stat工具并传递参数。从报错信息./a: line 60: stat -c %Y '/home/agrillet/a': No such file or directory就能看出来——Shell在尝试查找一个名为stat -c %Y '/home/agrillet/a'的命令,而不是执行stat并给它传参数。
为什么会这样?大概率是你在脚本里写这条命令的方式有误:
- 可能把整个命令用双引号/单引号括起来了,比如写成了
"stat -c %Y '/home/agrillet/a'"; - 或者把命令存在变量里后直接执行,比如
cmd="stat -c %Y '/home/agrillet/a'"然后$cmd,这种写法会让Shell把变量内容当作单一命令解析。
而你能成功执行cat /home/agrillet/a,是因为这条命令没有被错误包裹,Shell能正确识别cat是命令,后面的路径是参数。
解决方法
1. 修正stat命令的写法
直接在脚本里写无额外包裹的命令(路径含空格时才需要引号,这里路径没问题,加引号也不影响):
stat -c %Y '/home/agrillet/a'
确保不要把整个命令用引号括起来,让Shell能正确拆分stat作为命令,-c、%Y、/home/agrillet/a作为参数。
2. 更优雅地获取脚本自身信息(推荐)
硬编码脚本路径不够灵活,如果脚本被移动或创建符号链接,路径就会失效。推荐用$0变量(代表脚本自身的调用路径)结合工具获取绝对路径:
# 获取脚本的绝对路径(处理符号链接,需要readlink工具) script_path=$(readlink -f "$0") # 部分系统可用realpath替代readlink # script_path=$(realpath "$0") # 用stat获取脚本的修改时间 stat -c %Y "$script_path"
这种写法不管脚本在哪里被执行,都能正确定位到自身并获取信息。
内容的提问来源于stack exchange,提问作者Armand Grillet
相关产品推荐
相关产品推荐

