我希望用一个非常小的 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
然后根据需要停止该进程。