我想知道根據您的說法,使用這個 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
僅當腳本要在二進位檔案位置可能不同的多個系統上使用時才有用。如果該腳本僅在單一系統或同構網路中使用,則沒有必要。