nixosで/bin/bashを取得する方法

nixosで/bin/bashを取得する方法

だから私はshe-bangを次のように変更できることを知ってい#!/usr/bin/env bashて、私のスクリプトについてはそうします。しかし、実際に#!/bin/bashshe-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

システムを所有している場合、またはローカルシステム管理者を介してシステムを削除した場合、問題はありません。

おすすめ記事