在 *nix 中运行 shell 脚本

在 *nix 中运行 shell 脚本

我是使用 *nix 的新手(我实际上在 OS X 10.5 中使用 bash shell),我想知道这个问题的可能非常简单的答案是什么......

当我编写一个脚本(例如,名为 my_script)并将其保存到当前目录时,为什么我必须在其名称前面加上句号和正斜杠才能运行它?像这样:

./我的脚本

shell 难道不知道我想从当前目录运行它吗?Windows 似乎可以处理这种情况。

干杯,本

答案1

当前目录不会自动位于执行路径中。这部分是历史原因,部分是安全措施。

Unix 被设计为多用户系统。如果您的工作目录当前位于系统中多个用户共享的某个文件夹中,并且当前目录自动位于系统目录之前的执行路径中,那么当您运行时,standard_system_command您可能会得到其他用户在该共享文件夹中留下的恶意命令,而不是标准系统命令。

Windows 最初并不是一个多用户系统,因此命令提示符具有不同的默认行为。

我认为你不应该在您的路径中包含 ./。如果您创建了一个经常运行的脚本,那么您应该将其放在共享文件夹(如 /usr/local/bin)中,或个人文件夹(如 ~/bin)中,并将其添加到 PATH。您还可以在其中一个文件夹中放置符号链接或创建别名。

答案2

“shell 难道不知道我想从当前目录运行它吗?Windows 似乎可以处理这种情况。”

如果您将 . 添加到 PATH 变量中,那么确实可以,但从安全角度来看,这不是一个好主意。假设一个破解者在您的 /tmp 目录中创建了一个名为“ls”的文件和一大堆大文件。您正在尝试找出 /tmp 填满的原因,因此您输入了 cd / tmp; ls。现在,ls 以您的权限级别(可能是 root)运行,并且可以安装它想要的任何漏洞……可能在您不知情的情况下,因为破解者足够聪明,可以将所有内容传输到 >/dev/null,然后在最后使用您的命令行选项运行 ls。

答案3

默认情况下,当前目录不会自动添加到您的路径中。当前目录用“.”表示(就像目录的上一级用“..”表示一样)。您可以将“.”添加到您的路径中,但不建议这样做。

因此,'./my_script' 表示运行位于当前目录中的脚本 'my_script'。

答案4

./ 指示它首先在当前目录中查找,而不是其他路径。您可以按照说明在 .profile 文件中编辑用户名的路径这里

相关内容