为什么此脚本在当前目录中有效但在放入路径时失败?

时间:2013-10-22 23:27:16

标签: bash

我希望用一个非常小的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'哦?询问心灵想要知道如何使这项工作。

2 个答案:

答案 0 :(得分:3)

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

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

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

顺便说一句:我注意到你错误地在脚本中大写.sh

答案 1 :(得分:1)

如果脚本已打开以进行写入,则会出现错误bad interpreter: Text file busy(请参阅this SE questionthis SF question)。在尝试运行时,请确保没有打开它(例如在编辑器中)。