当前位置: 首页 > 面试题库 >

“#!/ usr / bin / env bash”和“#!/ usr / bin / bash”之间有什么区别?

万俟渊
2023-03-14
问题内容

在Bash脚本的标头中,这两个语句之间有什么区别:

  1. #!/usr/bin/env bash

  2. #!/usr/bin/bash

当查阅env 手册页时,得到以下定义:

 env - run a program in a modified environment

这是什么意思?


问题答案:

运行命令,通过/usr/bin/env具有寻找不管程序的默认版本是在当前的利益 ENV ironment。

这样,您不必在系统上的特定位置查找它,因为这些路径可能在不同系统上的不同位置。只要它在您的路径中,它就会找到它。

缺点是,/usr/bin/env awk -f如果您希望支持Linux,则将无法传递多个参数(例如,您将无法编写),因为POSIX不清楚行的解释方式,而Linux会在第一个命令之后解释所有内容表示单个参数的空格。您可以/usr/bin/env -S在的某些版本上使用它env来解决此问题,但是该脚本将变得更不可移植,并在相当新的系统上崩溃(例如,即使不晚于Ubuntu 16.04)。

另一个缺点是,由于您没有调用显式的可执行文件,因此很可能会出错,并且会导致多用户系统安全问题(例如,如果有人设法bash在您的路径中调用了其可执行文件)。

#!/usr/bin/env bash #lends you some flexibility on different systems
#!/usr/bin/bash     #gives you explicit control on a given system of what executable is called

在某些情况下,首选第一个(例如,运行具有多个python版本的python脚本,而不必重新编写可执行代码行)。但是在以安全性为重点的情况下,后者是首选,因为它限制了代码注入的可能性。



 类似资料:
  • 在Bash脚本的头中,这两个语句之间有什么区别: >

  • 我在许多地方看到过,包括本网站上的建议(首选的Bash shebang是什么?),使用而不是。我甚至看到一个有进取心的人建议使用是错误的,这样做会丢失bash功能。 尽管如此,我在一个严格控制的测试环境中使用bash,在这个环境中,循环中的每个驱动器本质上都是单个主驱动器的克隆。我理解可移植性的论点,尽管它不一定适用于我的情况。是否还有其他理由选择而不是替代方案?假设考虑可移植性,是否有理由使用它

  • 本文向大家介绍bash: /usr/bin/autocrorder: /usr/bin/python^M: bad interpreter: No such file or directory,包括了bash: /usr/bin/autocrorder: /usr/bin/python^M: bad interpreter: No such file or directory的使用技巧和注意事项,

  • 问题内容: 我正在尝试编译我的程序,它返回此错误: 在我的makefile文件中,我使用命令并链接到我的库,这是到我的库的另一个目录的符号链接。 是否可以添加选项以使其正常工作? 问题答案: 如果您的图书馆名称是say 并且位于路径上,请说: 然后将其链接到您的程序:

  • 问题内容: 我正在尝试使用Python 2.7安装MySQLdb。我收到的错误如下所示: 显然,它找不到Python 2.7。展望我看到: 该符号是什么意思?谁能建议对此错误采取补救措施? 问题答案: 它找不到Python库,而不是可执行文件。运行以查看Python库的位置,然后将其添加到库路径(例如,如果位于中,则要调用)。 该符号意味着该文件是一个符号链接; 表示它是可执行文件(这些文件由产生

  • 因此,我试图使用make-f Makefile编译一个程序,但我得到了以下错误/usr/bin/ld:not find-lgd 生成文件: 替换(libgd.a libgd.la libgd.so libgd.so.2 libgd.so.2.0.0)后,我收到以下错误: