GNU/Linux >> Linux の 問題 >  >> Linux

一時的な環境を設定する ($PATH)

特定のコマンド呼び出し用に個別の環境を作成できます:

VAR1=val1 VAR2=val2 VAR3=val3 make

私はこれを行うよりもきれいだと思います:

   export VAR1=val1
   export VAR2=val2
   export VAR3=val3
   make

ラッパー スクリプトを使用している場合を除き、場合によっては VAR1=val1 VAR2=val2 VAR3=val3 make のように VAR 変数は、make 呼び出し前の状態になります (エクスポートされていないものや存在しないものを含みますが、これらに限定されません)。

長い行は問題ではありません。いつでも複数の行に分割できます:

VAR1=val1\
VAR2=val2\
VAR3=val3\
make

任意の Unix コマンドに対して、このような環境変数を設定できます。シェルがすべて設定します。一部のアプリケーション (make など) または rake ) は、変数定義のように見える引数に基づいて環境を変更します (prodev_paris の回答を参照) が、それはアプリケーションによって異なります。


ご存知のように、独自のアプローチを作成するよりも、製品の構築などのタスクに標準ツールを統合する方が望ましいです。努力は通常、長期的に報われます。

そうは言っても、簡単なアプローチは、さまざまな環境ファイルを定義することです (例:build-phone.env ) 作業ディレクトリの設定、PATHCC などをさまざまな製品に適用し、必要に応じてインタラクティブに環境ファイルを調達します:

. /path/to/build-phone.env
[your build commands]
. /path/to/build-watch.env
[your build commands]

<ブロック引用>

カスタム makefile の代わりに環境を使用してビルド構成を設定する方がよいでしょうか?

ビルド システムのベスト プラクティスは、環境変数にまったく依存しないことです。プロジェクトをビルドするために必要なものは次のとおりです。

git clone ... my_project
make -C my_project

環境変数を設定する必要があると、エラーが発生しやすく、一貫性のないビルドにつながる可能性があります。

<ブロック引用>

既存の環境変数を適切に調整するには?

それらをまったく調整する必要はないかもしれません。コンパイラなどのツールへの完全なパスを使用することで、ビルド システムを環境から切り離します。


設定する変数がいくつかある場合は、ラッパー を作成します。 このスクリプトを、変更するコマンドのプレフィックスとして使用します。これにより、接頭辞を使用できます

  • make などの単一のコマンドに適用する 、または
  • シェルを初期化して、後続のコマンドが変更された設定を使用するようにする

ラッパーを使用します

  • コンパイラ オプションの設定 (clang など) 、 CC を設定します 変数、構成スクリプトがそれを選択されたコンパイラとして「見る」ようにする)、
  • POSIX C でテストするためのロケール変数の設定 対 en_USen_US.UTF-8 など
  • cron などの縮小された環境でのテスト .

各ラッパーは、適切な PATH を識別するために必要なことを行います 、 LD_LIBRARY_PATH 、および同様の変数。

たとえば、Python のローカル ビルドでテストするために、約 10 年前に次のアドホック スクリプトを作成しました。

#!/bin/bash
ver=2.4.2
export TOP=/usr/local/python-$ver
export PATH=$TOP/bin:$PATH
export LD_LIBRARY_PATH=`newpath -n LD_LIBRARY_PATH -bd $TOP/lib $TOP/lib/gcc/i686-pc-linux-gnu/$ver`
if test -d $TOP
then
    exec $*
else
    echo no $TOP
    exit 1
fi

with-python-2.4.2 として使用 myscript .

一部のラッパーは単に別のスクリプトを呼び出します。たとえば、クロスコンパイル用の変数を設定するために、configure スクリプトの周りでこのラッパーを使用します。

#!/bin/sh
# $Id: cfg-mingw,v 1.7 2014/09/20 20:49:31 tom Exp $
# configure to cross-compile using mingw32

BUILD_CC=${CC:-gcc}
unset CC
unset CXX

TARGET=`choose-mingw32`

if test -n "$TARGET"
then
    PREFIX=
    test -d /usr/$TARGET && PREFIX="--prefix=/usr/$TARGET"
    cfg-normal \
            --with-build-cc=$BUILD_CC \
            --host=$TARGET \
            --target=$TARGET \
            $PREFIX "[email protected]"
else
    echo "? cannot find MinGW compiler in path"
    exit 1
fi

どこで choose-mingw32 そして cfg-normal (a) クロスコンパイラで使用可能なターゲット名を見つけ、(b) configure スクリプトに追加オプションを提供するスクリプトです。

シェルのエイリアスを提案する人もいるかもしれません または関数 .コマンドライン シェルは通常 tcsh であるため、この目的には使用しません。 (a) 他のシェル スクリプト、(b) ディレクトリ エディター、または (c) テキスト エディターからこれらのコマンドを実行します。それらは POSIX シェルを使用し (もちろん、特定の機能を必要とするスクリプトを除く)、エイリアスや関数をほとんど役に立たないものにします。


Linux
  1. Linuxで$PATH変数を永続的に設定する方法を学ぶ

  2. Linuxで環境変数とシェル変数を設定/作成する方法

  3. * in * / etc / environment?で環境変数を参照する

  1. Linux で環境変数を設定、一覧表示、および削除する方法

  2. Linux エクスポート コマンドの例 (環境変数の設定方法)

  3. Ansible で Linux 環境変数を設定する方法

  1. Linux環境変数:LinuxVPSでの読み取りと設定の方法

  2. Tmux.confファイルで環境変数を使用していますか?

  3. 環境変数の確認