我希望用一个非常小的shell脚本替换我的失败内存。
#!/bin/sh
if ! [ –a $1.sav ]; then
mv $1 $1.sav
cp $1.sav $1
fi
nano $1
旨在保存脚本的原始版本。如果以前保留了原始文件,它会跳过移动和复制(并使用移动和复制回来保留原始时间戳)。
如果我使用 chmod 使其可执行后,我按照预期工作,我从我正在编辑的目录中启动它,例如与
./safe.sh filename
然而,当我将其移至/usr/bin
然后我尝试在不同的目录中运行它(没有前导./
)时,它失败了:
*-bash: /usr/bin/safe.sh: /bin/sh: bad interpreter: Text file busy*
我的问题是,当我将此脚本移动到路径中时(由echo $PATH
验证),为什么它会失败?
D'哦?询问心灵想要知道如何使这项工作。
答案 0 :(得分:3)
.
命令通常不用于运行独立脚本,这似乎让您感到困惑。 .
更通常以交互方式用于向您的环境添加新绑定(例如,定义shell函数)。它也用于脚本中的类似效果(例如加载脚本“库”)。
一旦您标记了脚本可执行文件(根据您的问题的评论),您应该能够从当前目录(例如./safe.sh filename
)或从路径中的任何位置运行它(例如{ {1}})。
您可能希望从名称中删除safe.sh filename
,以符合通常的命令名约定。
顺便说一句:我注意到你错误地在脚本中大写.sh
。
答案 1 :(得分:1)
如果脚本已打开以进行写入,则会出现错误bad interpreter: Text file busy
(请参阅this SE question和this SF question)。在尝试运行时,请确保没有打开它(例如在编辑器中)。