1

我希望用一个非常小的 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)时,它为什么会失败?

哦?好奇的人想知道如何做到这一点。

4

2 回答 2

3

.命令通常不用于运行独立脚本,这似乎让您感到困惑。.更典型地以交互方式用于向您的环境添加新绑定(例如定义 shell 函数)。它也用于脚本中的类似效果(例如加载脚本“库”)。

一旦您标记了脚本可执行文件(根据您对问题的评论),您应该能够从当前目录(例如./safe.sh filename)或从路径中的任何位置(例如)同样良好地运行它safe.sh filename

您可能希望.sh从名称中删除,以符合命令名称的通常约定。

顺便说一句:我注意到您If在脚本中错误地大写了。

于 2013-10-22T23:36:28.887 回答
2

bad interpreter: Text file busy如果脚本已打开以供写入,则会发生错误(请参阅此 SE 问题此 SF 问题)。确保在尝试运行它时没有打开它(例如在编辑器中)。

于 2013-10-23T03:49:42.093 回答