如何允许任何人在任何地方运行脚本

如何允许任何人在任何地方运行脚本

这个话题已经被讨论过,但我读过的每一篇文章都让我更加困惑。

例如,采用名为 test 的简单 bash hello world 脚本。我以用户 Bill 的身份创建了它,并执行了chmod 755 test使其可执行。该脚本位于/home/Bill/scripts并且我尝试进行导出PATH=$PATH:/home/Bill/scripts

当我在该目录中时,我可以使用./test.但是如果我退出,/home/Bill我会得到一个“-bash:./test:没有文件或目录”

如果我切换到根目录,即使我已将其添加到我的环境路径中或者我认为我使用了导出命令,我也找不到该脚本。

我还读到,我可以将脚本路径添加到我的脚本中/etc/sudoers,并且不需要密码,但这需要用户运行sudo ./test.有没有办法让这个脚本可以从任何地方的任何用户普遍访问和执行?

./test另一方面,我对test我创建的脚本与我创建的脚本之间的区别感到有点困惑,test但是当我或任何其他用户运行它时,他们会运行它还是./test只是运行它test

答案1

您可以通过指定脚本的路径(相对或绝对)或确保包含脚本的目录位于 shell 的搜索中来执行脚本$PATH

暂时忽略这个示例的名称不太好这一事实,因为您的 shell 可能会选择执行test其他脚本,如果包含的目录位于您的.这就是你所做的。在设置了此项的终端中,无论当前工作目录如何,都可以执行。testtest$PATHexport PATH=$PATH:/home/Bill/scripts$PATHtest

如果脚本是不是在你的$PATH, 或者你想明确指定哪个 test如果要执行,您不仅可以提供文件名,还可以提供文件的相对或绝对路径。因此,无论您当前的工作目录如何,您始终可以通过提供完整路径来执行脚本:/home/Bill/scripts/test

您还可以通过提供相对路径来执行脚本;对于一些示例,其中提示符指示您的工作目录:

/home/Bill/scripts$ ./test
/home/Bill$ scripts/test
/home/Bill/documents$ ../scripts/test
/home/James/documents$ ../../Bill/scripts/test

当您尝试执行时收到错误的原因

/home/Bill$ ./test

是因为没有文件/home/Bill/test,这就是您要执行的文件(“test当前目录中的文件.”)


如果您希望所有用户都能够仅使用脚本名称来运行脚本,而不需要提供脚本的绝对或相对路径,则它必须位于每个人的$PATH.您可以通过让每个用户添加/home/Bill/scripts到他们的$PATH,或者将脚本放在所有用户的默认位置$PATH(例如 )来完成此操作/usr/local/bin。但是您必须将脚本命名为 以外的名称test,因为这test是一种特殊情况:它是 shell 内置命令。

答案2

将脚本命名为“test”并不是一个好主意,因为已经有一个“test”命令:

型式试验
test 是 shell 内置的

除此之外,PATH 变量始终可以查找程序或脚本。因此,将脚本的路径放入 PATH 中

导出 PATH=/your/place/to/directory_of_script:$PATH

将使您的脚本易于访问。但不要使用 shell 内置名称或其他已经存在的程序或脚本名称!

相关内容