发布于 2016-01-11 19:33:22
假设脚本是一个Bash脚本(即它以#!/bin/bash开头),那么作者在这一点上是错误的。当直接运行shell脚本时,内核在开头看到#!/bin/bash行,然后以脚本的文件名作为参数运行该行,即/bin/bash myscript.sh。换句话说,内核正在执行您将其显式传递给shell时所做的事情。
现在,如果脚本以#!/bin/sh而不是#!/bin/bash开头,那么还有另一种可能性。Bash可以提供/bin/sh,但不必提供。它还优先考虑功能的大小或速度。如果您的/bin/sh是一个更小、更快的shell,那么直接运行脚本将使用该更快的shell,并且脚本将比在Bash下运行得更快。
这种情况发生在基于Debian的发行版(例如Debian、Ubuntu、Mint)中。他们倾向于使用一个名为dash的shell来提供/bin/sh而不是Bash,以使引导脚本运行得更快。
看看你的发行版是怎么做的,ls -l /bin/sh。它可能是指向/bin/bash或/bin/dash或另一个shell的符号链接。
https://unix.stackexchange.com/questions/254709
复制相似问题