Gee*_*eek 9 executable shell-script terminology
我在这个网站上看到过这个问题,这促使我提出这个问题。我想知道在 Unix 中说可执行文件和 shell 脚本有什么区别?
Chr*_*own 12
可执行文件是指任何设置了可执行位的文件都可以执行(即使程序实际运行中出现错误)。
shell 脚本是一种特定类型的可执行文件,旨在由 shell 使用#!
指令指定解释器来解释。
Gil*_*il' 12
一个脚本是一个文件,该文件:
一个shell脚本是一个脚本,其解释为一个壳。在 unix 世界中,“shell”是指类似于Bourne shell 的 shell家族;现代此类 shell(ash、bash、ksh、zsh 等)符合POSIX shell 标准。更一般地说,“shell”一词可以包括其他命令解释器,例如 csh、tcsh、fish……
一个可执行文件是可以执行的任何文件。为了有效地可执行,文件需要有两个属性:
ls -l
:x
字符必须出现在权限列中。该文件的格式必须是系统识别为可执行文件的格式。可执行格式可以分为几类:
#!
后跟文件路径。为了执行这样的文件,内核执行解释器程序并将脚本的路径作为参数传递给它。请注意,作为可执行文件取决于系统。例如,amd64 Linux 二进制文件可在 amd64 Linux 系统上执行,但不能在 32 位系统上执行。Android 的二进制文件不能在正常的 Linux 安装上执行。如果 Wine 存在,Windows 可执行文件只能在 Linux 上执行。以 开头的脚本#!/usr/local/bin/ruby
只有在程序位于 时才可执行/usr/local/bin/ruby
。
shell 脚本通常是可执行的。但是如果您没有执行它的权限,它可以是不可执行的。你仍然可以通过将它显式地传递给解释器来解释它(例如bash /path/to/script
)——“让它被解释”是说“执行”的一种奇特的方式。