一个使用* nix的新手(我实际上在OS X 10.5中使用了一个bash shell),我想知道可能很简单的答案是什么?
当我编写一个脚本(称为my_script)并将其保存到当前目录中时,为什么必须在其名称前加上句点和正斜杠才能运行它? 喜欢这个:
./my_script
shell不能告诉我想从当前目录运行它吗? Windows似乎处理这种情况。
干杯本
当前目录不会自动在执行path中。 这部分是历史,部分是安全措施。
Unix被devise成一个多用户系统。 如果您的工作目录当前位于系统的许多用户之间共享的某个文件夹中,并且当前目录自动位于系统目录之前的执行path中,那么当您运行standard_system_command ,可能会遇到其他用户共享文件夹,而不是标准的系统命令。
Windows并没有像多用户系统那样开始其生命,所以命令提示符具有不同的默认行为。
在我看来,你不应该在path中包含./。 如果你已经创build了一个脚本,那么你应该把它放在一个共享文件夹(如/ usr / local / bin)中,或者放在一个个人文件夹中,比如添加到PATH中的〜/ bin。 您也可以在其中一个文件夹中插入符号链接或创build一个别名。
“shell不知道我想从当前目录运行它,Windows似乎处理这种情况。”
如果你加了。 到你的PATHvariables,它会,但从安全angular度来看,这是一个坏主意。 考虑一个破解者已经在/ tmp目录下创build了一个名为“ls”的文件和一大堆大文件。 你试图弄清楚为什么/ tmp被填满,所以你inputcd / tmp; LS。 现在,ls正在以你的特权级别(可能是root)运行,并可以安装它想要的任何漏洞利用……可能在你不知情的情况下进行安装,因为这个破解者足够聪明,可以将所有东西都pipe理到/ dev / null,然后在最后运行ls与您的命令行选项。
当前目录默认不会自动添加到您的path中。 当前目录由'。'表示 (就像一个目录是'..')。 你可以加 '。' 到你的path,但不build议。
因此,“./my_script”表示,运行位于当前目录中的脚本“my_script”。
./告诉它先查看当前目录而不是另一个path。 您可以在.profile文件中为您的用户名编辑您的path,并在此指示。