ead*_*ter 14 shell-script shebang
哪一个更好:
#!/usr/bin/env sh
#!/bin/sh
我曾经认为第一个是最好的,无论如何我发现在一些基于 Linux 的系统(如 Android)上缺少路径名,所以现在我认为拥有“可移植”shell 脚本的唯一方法是不包括任何标题...
对于可移植性,您可以放心地假设它#!/bin/sh
会在任何标准 Unix 或 Linux 系统上找到一个主要符合 POSIX 的 shell,但仅此而已。
在 FreeBSD、OpenBSD 和 NetBSD(以及 DragonFly、PC-BSD 和其他一些衍生产品)中,bash 位于/usr/local/bin/bash
(如果已安装),因此该/usr/bin/env
方法提供了 Linux 和 BSD 之间的可移植性。
Android 不是标准的 Unix 或 Linux 系统。在我的非 root 安卓手机上,没有/usr/bin/env
,/bin/bash
甚至不/bin/sh
存在,系统外壳是/system/bin/sh
.
缺少#!
(shebang)的 shell 脚本将尝试在某些系统上调用它的 shell 中运行,或者可能/bin/bash
在其他系统上使用不同的默认解释器(例如)。虽然这可能适用于 Android,但不能保证适用于其他操作系统,在这些操作系统中,用户可能会选择使用不是bash
. (我在 FreeBSD 中使用 tcsh,它是默认的 shell,并且无shebang 的脚本由调用的 shell 解释。)
所以从我的角度来看,似乎不可能创建一个可在 Android 和非 Android(Linux 或 Unix)系统之间移植的 shell 脚本,因为 Android 的处理方式不同。
归档时间: |
|
查看次数: |
7685 次 |
最近记录: |