シェル組み込みコマンドを使用せずにシェル環境変数を設定する

シェル組み込みコマンドを使用せずにシェル環境変数を設定する

私は「コマンド」を引数として使用し、その周りにいくつかの便利なラッパーを追加するプログラムを作業しています。おそらく、助けを与えるためにコマンドが「存在する」ことを確認するようです。私が知る限り、この検査はwhich。私のbashシェルにはset同じコマンドがexport組み込まれているので、which何も返されません。

シェル組み込みコマンドを使用せずに環境変数を設定する方法はありますか?

set.sh私の考えは正義と同じことをすることです

#! /bin/bash
export $1

しかし、これはクレイジーだと思います。

答え1

できません。シェルだけが独自の環境を変更できますsetexport 〜しなければならない常に内蔵されています。

cdなどはalias同じです。

私が提案できる最善の方法は、シェル関数を使用してラッパーを再実装することです。または「取得する」シェルスクリプトです。どちらにしても実行されるラッパーは~へシェルはこれらの操作をよりスムーズに実行できます。

答え2

元の問題に対する考えられる解決策は、ラッパーにラッパーを提供することです(Xzibitイメージを除く)。

#!/bin/bash

command="$1"
temp=$(mktemp -d)

> "$temp/$command"
chmod a+x "$temp/$command"

PATH+=:$temp

your_wrapper

rm -r "$temp"

これにより、コマンドをオーバーライドせずにラッパーのテストに合格する空の実行可能ファイルが生成されます。実際に実行したいです(内蔵)。

関連情報