为什么这个脚本在当前目录中可以运行,但放在路径中却失败了?

为什么这个脚本在当前目录中可以运行,但放在路径中却失败了?

我希望用一个非常小的 shell 脚本来取代我失败的记忆。

#!/bin/sh
if ! [ –a $1.sav ]; then
    mv $1 $1.sav
    cp $1.sav $1
fi
nano $1 

旨在保存脚本的原始版本。如果原始版本之前已保存,则它会跳过移动并复制回(我使用移动并复制回来保留原始时间戳)。

如果在使用 chmod 使其可执行后,我从正在编辑的目录中启动它,则它可以按预期工作,例如使用

./safe.sh 文件名

但是,当我将其移动到 /usr/bin 中时(因此它在路径中,已通过以下方式验证回显 $PATH),然后我尝试在不同的目录中运行它(没有前导 ./ ),它失败了

-bash:/usr/bin/safe.sh:/bin/sh:错误的解释器:文本文件繁忙

哦?好奇的人想知道如何实现这一点。

答案1

这不是一个答案,而只是一个(可能有价值的)提示:
这会是一个比脚本更好的解决方案吗?

cp -an source_file target_file

-a 选项保留所有属性,包括时间戳。
-n 选项可防止覆盖现有文件

答案2

“文本文件繁忙”意味着该脚本正在其他地方使用。使用以下命令找出正在打开文件的内容:

lsof | grep safe.sh

然后根据需要停止该进程。

相关内容