使用 /usr/bin/env 作為 Sha-bang

使用 /usr/bin/env 作為 Sha-bang

我想知道根據您的說法,使用這個 she-bang 是否是一個好的做法:

#!/usr/bin/env bash

代替

#!/bin/bash

本文似乎提倡使用,/usr/bin/env但當我使用它時,出現了懷疑。

你有什麼意見?

答案1

實際上,#!/usr/bin/env它可以移植到幾乎所有理解#!.對於調用可能位於$PATH.如果您對解釋器的路徑進行硬編碼,則將腳本複製到另一台電腦時可能無法運作。

我的一般策略是用於#!/bin/sh僅使用可移植功能的腳本sh(即,如果我只關心現代unice,則僅使用POSIX 功能,如果我關心較舊的系統(例如較舊的Solaris 版本),則僅使用Bourne功能)等#!/usr/bin/env

的缺點#!/usr/bin/env是它不允許您將任何選項傳遞給解釋器。對於某些解釋器,可以透過將選項指定為指令來解決此問題,或使第二行成為雙語片段,在 sh 執行時呼叫解釋器,而在目標解釋器執行時不執行任何操作。有一個常見的perl慣用語,例如(對於傳遞 有用-T)。

答案2

env僅當腳本要在二進位檔案位置可能不同的多個系統上使用時才有用。如果該腳本僅在單一系統或同構網路中使用,則沒有必要。

相關內容