タグ付けされた質問 「environment-variables」

環境変数に関する質問については、実行中のプロセスの動作とリソースへのアクセスに影響を与える可能性のある一連の動的変数。このタグは、環境変数に関する質問、または実行中のプロセスの動作とリソースへのアクセスにおける変数値の設定または変更の影響から生じる問題に関する質問に使用します。

2
変数の割り当ては現在実行中のシェルに影響します
いくつかのコードを書いているとき、私はこの行を見つけました: $ TZ="America/Los_Angeles" date; echo "$TZ" Thu Dec 24 14:39:15 PST 2015 「ロサンゼルス」での実際の時間を正しく示し、変数の値がTZ保持されないこと。期待どおりすべて。 ただし、この行では、一部の形式を日付に展開し、基本的に同じことを実行するため、TZの値が保持されます。 TZ="America/Los_Angeles" eval date; echo "$TZ" Thu Dec 24 14:41:34 PST 2015 America/Los_Angeles さらにいくつかのテストを行った結果、これが一部のシェルでのみ発生することがわかりました。ダッシュ、kshでは発生しますが、bashやzshでは発生しません。 Q 質問は次のとおりです。 TZの値が現在のシェルで保持されているのはなぜですか? それをどのように回避/制御できますか(可能な場合)? 追加。 次の2行を使用して、いくつかのシェルでテストを実行しました。 myTZ="America/Los_Angeles" unset TZ; { TZ="$myTZ" date; } >/dev/null; echo -n " direct $TZ" unset TZ; { TZ="$myTZ" …

1
`env foo = bar echo $ foo`は何も出力しません
私は巨大なブレインファートを持っていると思います。私は期待します env foo=bar echo $foo ...印刷しますがbar、代わりに空の行が表示されます。ワット。 bash構文を使用した場合も同じことが起こります。 foo=bar echo $foo

2
呼び出し側のシェルがsudoで使用されないようにする方法
CentOS 6.5でsudo-1.8.6を実行しています。私の質問は非常に単純です。SHELLがユーザーの環境からsudo環境に伝播するのを防ぐにはどうすればよいですか? 通常、人々は逆の方向に進んでいます-彼らは環境変数を保存したいのです。しかし、シェルが/sbin/nologinsudo経由でコマンドを実行しようとするユーザー「zabbix」という問題が発生しています。Sudoは/sbin/nologinrootがサブシェルを実行できないようにを維持しています。(更新:この部分は正しいですが、SHELL環境変数ではありません。問題となっているのは、/ etc / passwdからプルされているシェル値です。) 問題を説明するテストを含めます。これは実際の使用例ではありませんが、呼び出し元のユーザーのシェルが保持されていることを示しています。ユーザーとして実行するプログラムがありますzabbix。呼び出します/usr/bin/sudo -u root /tmp/doit(プログラミングzabbixはデーモンとして実行されるため/sbin/nologin、パスワードファイルのシェルはそれを妨げません)。/tmp/doit単純に以下を備えたシェルスクリプトです。 #!/bin/sh env > /tmp/outfile (そのモードは明らかに755です)。でそれoutfileを見ることSHELLができます/sbin/nologin。ただし、この時点では、スクリプトはsudoを介してrootとして実行されているため、前のユーザーの環境変数を含めないでください。 ここに私の/ etc / sudoersがあります: デフォルトは必須です デフォルト!visiblepw デフォルトalways_set_home デフォルトenv_reset デフォルトenv_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS" デフォルトenv_keep + = "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE" デフォルトenv_keep + = "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES" …

3
_PROXYに一致するすべてのENV変数の設定を解除します
私は一致するすべての環境変数を設定解除しようとしています_PROXY: env | grep -i _proxy | column -t -s '=' | awk '{ print $1 }' | grep -iv 'no_proxy' | xargs -0 -I variable unset variable しかし、それはで失敗していxargs: unset: No such file or directoryます。 ただし、に変更しようとするunsetとecho、すべてが期待どおりに機能しているように見えます。設定されている変数のリストが表示されます。 env | grep -i _proxy | column -t -s '=' | awk '{ print …

4
環境を変更するコマンドの出力を変数に保存します
環境を変更するコマンドの出力を変数に保存する方法は? 私はbashシェルを使用しています。 私が持っていると仮定します: function f () { a=3; b=4 ; echo "`date`: $a $b"; } そして今、私はコマンドを使用して実行することができますf: $ a=0; b=0; f; echo $a; echo $b; echo $c Sat Jun 28 21:27:08 CEST 2014: 3 4 3 4 の出力fを変数に保存したいcので、試してみました: a=0; b=0; c=""; c=$(f); echo $a; echo $b; echo $c しかし、残念ながら、私は持っています: 0 0 …

2
$ BASH_ENVの可用性を保証する方法
非インタラクティブ、非ログインシェルは、$ BASH_ENVで指定されたスクリプトを入手しようとします。しかし、cronジョブまたはスクリプトが特定のセッションに対して$ BASH_ENVを設定する前に$ BASH_ENVが設定されることをどのように保証しますか?ハードコードしてBashをコンパイルする唯一のオプションはありますか?


1
環境変数とシェル変数の違い
環境変数は子プロセスで継承されると言われていますが、シェル変数は継承されていません。ただし、次のテストでは、シェル変数が環境変数と同じように子プロセスで表示されることを示しています。違いはなんですか? > bash --version GNU bash, version 3.2.39(1)-release (x86_64-suse-linux-gnu) Copyright (C) 2007 Free Software Foundation, Inc. > export TEST="ENV_TEST" #env var > sh -c "echo \$TEST" ENV_TEST > TEST="SHELL_TEST" #shell var > sh -c "echo \$TEST" #shell var is seen in child process SHELL_TEST

2
(G)VIMは私のシステムとは異なる$ PATHを使用します
UbuntuはTeXLiveの最新パッケージを提供していないため、手動でインストールしました。ただし、一部のプログラムでは依存関係としてTeXLiveが必要です。それで私がやったことは、その上にUbuntuリポジトリからTeXLiveパッケージをインストールすることです。これは2009バージョンです。次に、$ PATHを変更して手動でインストールした2011バージョンを含めました。そのため、プログラムは常に最新のTeXLiveバージョンをポイントして使用します。これまでのところ、これはうまくいきました。 しかし、ここで簡単です。LaTeXファイルを編集するためにVIMに切り替えたとき、頭痛の種が多すぎて、VIMがTeXLive2009だけを「認識」していることに気付きました。このスクリーンショットを見てください。左側がVIM、右側がターミナルです。 次に、$ PATH VIMが使用しているものを確認しましたが、結局のところ、TeXLive 2011を指していない別のものを使用しています。このスクリーンショットを参照してください。 VIM: :! echo $PATH /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games ターミナル: echo $PATH /usr/local/texlive/2011/bin/x86_64-linux:/usr/local/texlive/2011/bin/x86_64-linux:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games これを修正する方法はありますか?私のLaTeXプラグインがTeXLive 2011を使用できるようにするために、おそらくVIMに同じ$ PATHを使用させることによって?どんな助けでも大歓迎です!

2
システム全体で/ usr / local / lib / pkgconfigにも* .pcファイルを探すようにpkg-configに指示する
現在、pkg-configだけに見え/usr/lib/pkgconfigます。PKG_CONFIG_PATH環境変数をエクスポートすることでユーザーに合わせて調整できますが、もう一度rootで実行するのを忘れて、時間を無駄にしました。なぜ私のプラグインが正しくインストールされていないのですか(makefileが使用されていますpkg-config)。では、システム全体に設定するにはどうすればよいので、常に両方/usr/libを調べます/usr/local/libか?


4
現在のターミナルのクローンである新しいターミナルを生成できますか?
たとえば、ディレクトリ/ asdf / qwer / dfgh / wert / asdf / qwerでコードを開発していて、そのようなディレクトリをさらに3つ追加して、不可解な環境変数を設定したとします。次に、本当に同じ方法で別のターミナルを開いて設定する必要があることに気づきました(ただし、.bashrcを変更するだけなので、この必要は再発しません)。これの正確なクローンである新しいターミナルウィンドウを開くコマンドはありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.