GNU/Linux >> Belajar Linux >  >> Linux

Tetapkan lingkungan sementara ($PATH)

Anda dapat membuat lingkungan individual untuk pemanggilan perintah tertentu:

VAR1=val1 VAR2=val2 VAR3=val3 make

Saya menemukan ini lebih bersih daripada melakukan:

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

kecuali jika Anda menggunakan skrip pembungkus dan bahkan mungkin seperti VAR1=val1 VAR2=val2 VAR3=val3 make VAR variabel akan menjadi apa pun sebelum pemanggilan make (termasuk tetapi tidak terbatas pada tidak diekspor dan tidak ada).

Antrean panjang bukan masalah, Anda selalu dapat membaginya menjadi beberapa baris:

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

Anda dapat mengatur variabel lingkungan seperti ini untuk setiap perintah Unix. Semua shell akan mengaturnya. Beberapa aplikasi (seperti make atau rake ) akan mengubah lingkungannya berdasarkan argumen yang terlihat seperti definisi variabel (lihat jawaban prodev_paris), tetapi itu tergantung pada aplikasinya.


Seperti yang kita semua tahu, lebih disukai untuk mengintegrasikan alat standar untuk tugas seperti membangun produk Anda daripada membuat pendekatan Anda sendiri. Upaya tersebut biasanya membuahkan hasil dalam jangka panjang.

Karena itu, pendekatan sederhana adalah dengan mendefinisikan file lingkungan yang berbeda (mis. build-phone.env ) mengatur direktori kerja, PATH , CC dll. untuk berbagai produk Anda dan sumber file lingkungan Anda secara interaktif sesuai permintaan:

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

Apakah lebih baik menggunakan lingkungan daripada makefile khusus untuk menyetel konfigurasi build?

Praktik terbaik untuk membangun sistem adalah tidak bergantung pada variabel lingkungan sama sekali. Sehingga tidak ada lagi yang diperlukan untuk membangun proyek Anda selain:

git clone ... my_project
make -C my_project

Harus menyetel variabel lingkungan rawan kesalahan dan dapat menyebabkan build yang tidak konsisten.

Bagaimana cara menyesuaikan variabel lingkungan yang ada dengan benar?

Anda mungkin tidak perlu menyesuaikannya sama sekali. Dengan menggunakan jalur lengkap ke alat seperti kompiler, Anda memisahkan sistem build dari lingkungan.


Ketika saya memiliki beberapa variabel untuk diatur, saya menulis sebuah wrapper skrip yang kemudian saya gunakan sebagai awalan dari perintah yang ingin saya modifikasi. Itu memungkinkan saya menggunakan awalan juga

  • menerapkan satu perintah, seperti make , atau
  • menginisialisasi shell, sehingga perintah selanjutnya menggunakan pengaturan yang telah diubah.

Saya menggunakan pembungkus untuk

  • mengatur opsi kompiler (seperti clang , untuk menyetel CC variabel, membuat skrip konfigurasi "melihatnya" sebagai kompiler yang dipilih),
  • mengatur variabel lokal, untuk menguji dengan POSIX C versus en_US versus en_US.UTF-8 , dll.
  • menguji dengan lingkungan yang diperkecil, seperti di cron .

Setiap pembungkus melakukan apa yang diperlukan untuk mengidentifikasi PATH yang tepat , LD_LIBRARY_PATH , dan variabel serupa.

Misalnya, saya menulis skrip ad hoc ini sekitar sepuluh tahun yang lalu untuk menguji dengan versi lokal python:

#!/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

dan menggunakannya sebagai with-python-2.4.2 skrip saya .

Beberapa pembungkus cukup memanggil skrip lain. Sebagai contoh, saya menggunakan pembungkus ini di sekitar skrip configure untuk menyiapkan variabel untuk kompilasi silang:

#!/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

di mana choose-mingw32 dan cfg-normal adalah skrip yang (a) menemukan nama target yang tersedia untuk kompiler silang dan (b) menyediakan opsi tambahan untuk skrip konfigurasi.

Orang lain mungkin menyarankan alias shell atau fungsi . Saya tidak menggunakannya untuk tujuan ini karena shell baris perintah saya biasanya tcsh , sementara saya menjalankan perintah ini dari (a) skrip shell lain, (b) editor direktori, atau (c) editor teks. Itu menggunakan shell POSIX (kecuali tentu saja, untuk skrip yang membutuhkan fitur khusus), membuat alias atau fungsi tidak banyak berguna.


Linux
  1. Pelajari Cara Mengatur Variabel $PATH Anda Secara Permanen di Linux

  2. Cara Mengatur, Mendaftar, dan Menghapus Variabel Lingkungan di Linux

  3. Contoh Perintah Ekspor Linux (Cara Mengatur Variabel Lingkungan)

  1. Variabel Lingkungan Linux:Cara Membaca dan Mengatur di VPS Linux

  2. Memeriksa variabel lingkungan

  3. Cara mengatur variabel lingkungan Linux dengan Ansible

  1. Cara Mengatur/Membuat Variabel Lingkungan dan Shell di Linux

  2. Menggunakan Variabel Lingkungan Dalam File Tmux.conf?

  3. Referensi Variabel Lingkungan *di* /etc/environment?