web-dev-qa-db-ja.com

関数/変数をzshrcに対してローカルに保つにはどうすればよいですか?

zshrcで宣言した変数はすべて、シェルで環境変数として使用できます。これが起こらないようにしたい。

変数を関数に入れてローカルに設定しようとしましたが、その関数はzshrcの外でも使用できます。

どのようにすればよいですか私のzshrcで何が私のzshrcに留まるのか

28
Dean

これらは使用可能ですが、エクスポートされないため、コマンドラインから起動するスクリプトはこれらの変数を取得しません。もしあなたの .zshrcは次のようになります

function zshrc()
{
    local VAR=1
    # Do stuff
}
zshrc

その後、zshrc関数を再度起動する必要はありません。

unfunction zshrc

その後。

21
ZyX

Zshの最新バージョンを使用している場合は、無名関数を使用できます。

function () {
  local xyz=abc
  # whatever
}

関数は自動的に実行されてから破棄されます。スコープの目的でのみ存在します。

これは、zshrcだけでなく任意のソースファイルでも機能します。

31
qqx

Word localを変数に追加しないと、次のいずれかを実行するまで残ります。

  1. 新しいターミナルウィンドウを開きます。
  2. シェルに応じてexec zshまたはexec bashを実行します。これは、Word localで割り当てられなかったローカル変数をクリアするだけです。

これを避ける

method_name(){
  a=11
  echo $a
}

正しい例

method_name(){
  local a=11
  echo $a
}

この変数のスコープは関数名method_nameで、呼び出されたとき(その後ではなく)関数内でのみ使用できます。

そのローカル変数に直接アクセスしたい場合は、この方法で設定できます

local z=11

そして、それをこのように呼びます

echo $z

さらに、環境変数はローカル変数とは異なります

シェルとニーズに応じて、.bash_profileまたは.bashrcまたは.zshrcなどを使用して、関数とエイリアスを保存できます。

環境変数とそれぞれのシェルの詳細については、このリファレンスを参照してください

シェル展開を使用してコマンドラインで環境変数を設定する方法を理解するためにこれもお読みください

envまたはprintenvを使用して環境変数をすばやく表示できます

慣例では大文字を使用します

一時的に環境変数を設定するには(ターミナルを閉じるまで保存されます)

export A=11またはexport B="11 is part of this string"

新しいターミナルウィンドウまたはソースの.zshrcまたは.bashrc、あるいは使用しているものを開いていると仮定すると、ターミナルセッションを閉じるまで、この環境変数を使用できます。注:設定時には$を使用しないでください。ただし、変数を参照する場合は$を使用してください。

echo "A is equal to: $A and that is pretty Nice"

echo "$A"

ファイルを調達する方法

source ~/path/to/file/filename

source ~/.bash_profile

環境変数を設定するには(削除するか、再度設定するまで)

上記のコードを使用しますが、〜/ .bash_profileまたは〜/ .zshrcまたはその他のそれぞれのファイルに配置します。ファイルを保存し、ソースにします。

export B="11 is part of this string"

あなたは今それを見ることができます

env

その環境変数を削除するには、その環境変数をファイルから削除し、再度ファイルを入手します。

環境変数を一時的に削除するには、unsetを使用します

unset B

設定を解除する場合、$はありません。

コマンドラインから環境変数を設定するには

export BLABLA="environment variable set from the command line, saved in file for later use"

送信先のファイルを確認してください。新しい行で始まっていない可能性があります。他の関数やエイリアスなどの最後の行に連結されている可能性があります。

これは完全に包括的な答えではありませんが、正しい方向への大きな一歩です。これは、ターミナルシェルのスコープを設定、使用、および削除する方法を示しています。

7
jasonleonhard