コマンドを環境に関連付けるための推奨方法は何ですか?

コマンドを環境に関連付けるための推奨方法は何ですか?

時には、実行時にPATHと互換性のない依存関係を見つけるためにPATHを検索するソフトウェア(再コンパイルする権限や忍耐力なし)を使用することがあります。たとえば、クラスタにPython 3を頻繁に作成し、時にはc3コマンドを使用したいのですが、cexecc3では私のPATHの最初のPythonがPython 2になりたいと思います。

このように目的の一時パスを指定すると機能PATH=/usr/bin cexec echo hello worldしますが、入力が多すぎます。同じものを入れて

C3PREFIX=/usr/bin
alias cexec=$C3PREFIX cexec
alias cname=$C3PREFIX cget
alias cname=$C3PREFIX cpush
alias cname=$C3PREFIX cnames
... for all such commands needing a special environment.

私のシェル構成では、これは入力の問題を解決する良い方法ですが、その環境が必要なすべての項目に同じ下位レベルのマクロを適用する必要があります。コマンドは中断されず(これらのマクロは複雑なコマンドの実行時にハッキングされるように見えることがあります)、コンテナ/仮想マシンのように動作しない、より体系的な方法で環境に継続的に関連付けることができると思います。ヘビー級ソリューションです。この問題に対する標準的な解決策はありますか?

ベストアンサー1

環境を設定し、ターゲットを実行する実行可能ファイルの周りにsh(ダッシュ優先)ラッパーを作成します。

#!/bin/sh
ENVVAR=envvar exec ./target "$@"

Dashは非常に効率的で、マイコンピュータのターゲット起動時間に約0.0005秒しか追加されていません。

同等のCラッパーはこれよりはるかに高速ではありません。

#include <unistd.h>
int main(int argc, char *argv[])
{
       setenv("ENVVAR", "envvar", 1);
       execvp("./target", argv);
}

おすすめ記事