だから私はshe-bangを次のように変更できることを知ってい#!/usr/bin/env bash
て、私のスクリプトについてはそうします。しかし、実際に#!/bin/bash
she-bangを使って多くのスクリプトを実行できるようにしたいです。時には変更は簡単ですが、時にはスクリプトがユーザー以外の人によって直接実行されるため、そうでない場合もあり、実際に触れたくない部分でもあります。
リンクを取得するためにシステム設定で有効にするオプションはありますか/bin/bash
?これをしてはならない理由はありますか?そして、この標準ではないのはなぜですか? (滑りやすい斜面について話さないでください。/bin/bash
これはおそらくUnixシステムの最も一般的な仮定の1つです)
ベストアンサー1
標準のPOSIXシェルはですが、でsh
はありませんbash
。したがって、POSIXシステムでは、Bourne準拠のシェルが使用可能で名前が付けられていると想定できますが、そのシェルがインストールされていると仮定するsh
理由はなく、bash
そのシェルがあると仮定する理由もありません/bin/bash
。実際、POSIX仕様sh
以下を行う必要もありません/bin/sh
。
アプリケーションは、シェルの標準PATHを/bin/shまたは/usr/bin/shと見なすことはできません。確認する必要があります。内蔵シェル。
たとえば、標準のshユーティリティの場所を確認するには、次のようにします。
command -v sh
一部の実装では、以下が返されることがあります。
/usr/xpg4/bin/sh
また、実行可能スクリプト("#!"構文)をサポートするシステムでは、実行可能スクリプトを使用するアプリケーションで getconf -v を使用してそのスクリプトをインストールしてシェルパス名を確認し、インストール時に"#!"を適切にに更新することをお勧めします。たとえば、sedを使用)。
だから非標準という理由は標準ではない/bin/bash
からです。bash
これがenv
存在の理由であり、#!/usr/bin/env bash
存在の理由であるポータブルソリューションこのようなことのために。
言い換えれば、これがあなたのシステムであるならば、あなたは完全にあなたに依存します。インストール場所/bin/bash
にシンボリックリンクを追加しない理由はありませんbash
。たとえば、bash
にある場合は/usr/bin
、単にルートシェルを開き、次のように実行できます。
ln -s /usr/bin/bash /bin/bash
システムを所有している場合、またはローカルシステム管理者を介してシステムを削除した場合、問題はありません。