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

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


4
sudoでどのような環境が得られますか?
sudoを実行すると、私の環境はどうなりますか? を実行するとsudo command、自分またはルートの環境が見えないようです。たとえば、両方のパスにはが含まれていますが、フルパス/usr/local/binなしでプログラムの1つを実行しようとすると失敗します。 私はsudoがrootとして実行されていると思ったので、rootの環境を取得しました。sudoでbashを実行する方法は、ルートまたは通常のユーザーとは異なりますか? 編集: sudo -i最近使用していますが、最近、現在の作業ディレクトリがに設定されるため、問題が発生してい/rootます。これは予想通りです(ちょっと)、でもsudoがで私の実行可能ファイルを認識しない理由はまだわかりません/usr/local/bin。 編集: Fedora 15を実行しています。

1
pkexecを使用してGUIアプリケーションをルートとして実行するにはどうすればよいですか?
Gnome3 Flashback Desktop Environmentに付属のTrisquel GNU / Linux-Libreを使用しています。 私はsudo&によってGUIアプリケーションをルートとして実行できることgksudoを知っていますが、どうすればルートとしてGUIアプリケーションを実行できますpkexecか? 私が実行しようとするとgedit(など他のアプリケーション:nautilus)でpkexec gedit、それは認証用のパスワードを求めるプロンプトが表示されます- パスワードを入力した後、エラーで終了します- $ pkexec gedit error: XDG_RUNTIME_DIR not set in the environment. (gedit:6135): Gtk-WARNING **: cannot open display: それで、ディスプレイ環境に何か問題があるようです。 私も試しましたDISPLAY=:0 pkexec geditが、動作しません。 次の情報は以下から入手できますman pkexec。 PROGRAMが実行する環境は、LD_LIBRARY_PATHまたは同様のメカニズムを介したコードの挿入を回避するために、最小限の既知の安全な環境に設定されます。さらに、PKEXEC_UID環境変数は、pkexecを呼び出すプロセスのユーザーIDに設定されます。その結果、$ DISPLAYおよび$ XAUTHORITY環境変数が設定されていないため、pkexecはX11アプリケーションを別のユーザーとして実行することを許可しません。アクションのorg.freedesktop.policykit.exec.allow_guiアノテーションが空でない値に設定されている場合、これらの2つの変数は保持されます。ただし、これはお勧めできません。レガシープログラムにのみ使用してください。 今、私はこれを達成するために何をすべきかわかりません。 したがって、を使用してrootとしてGUIアプリケーションを実行する方法を見つけるのに役立ちますpkexec。またはこれは可能ですか? ところで、gparted-pkexecうまく機能するコマンドに触発されました。どのようにgparted使いますかpkexec?

2
LC_ALLを設定せずにLC_ *を設定します
ドイツ語(オーストリア)ロケール(A4用紙サイズ、24時間制、yyyy-mm-dd)が必要ですが、英語のユーザーインターフェイス(翻訳が苦手なのは好きではありません)。これを実現する正しい方法は、LC_変数を次のように設定することだと考えました.bashrc(間違っている場合は修正してください)。 LC_MESSAGES=en_US.UTF-8 LC_$everythingelse=de_AT.UTF-8 すべての値を設定するのではなく、LC_ $ everythingelseを設定するよりエレガントな方法はありますか?LC_ALLの設定は、LC_MESSAGESよりも優先されるため、オプションではありません。 $ export LC_ALL=de_AT.UTF_8 $ export LC_MESSAGES=en_US.UTF_8 $ echo $LC_MESSAGES en_US.UTF_8 $ locale | grep LC_MESSAGES LC_MESSAGES="de_AT.UTF_8" PS:それは共有マシンであり、私はsudoerではないので、システム全体の設定を変更することはオプションではありません。

2
ウェイランドのgnomeと仮想端末(またはssh)のbashの環境変数を設定します
Gnome 3.22はデフォルトでウェイランドを使用します。ウェイランドのGnomeは読み取りません~/.profile(~/.bash_profileまたは/etc/profile)。https://bugzilla.gnome.org/show_bug.cgi?id=736660を参照してください。 初期化ファイルを次のように設定しています。 .bash_profileソース以外は何もせず.profile、.bashrc .profilePATHおよびのような環境変数のみを設定しますLC_MESSAGES .bashrclessやなどのアプリケーションのbash固有の設定とエイリアス、環境変数を設定しますgrep。 効果(ウェイランドの前)は次のとおりでした。 私がグラフィカルにログインしたときに.profile読むと、環境変数のようなものだったPATHとLC_MESSAGESしました。ターミナルエミュレーター内でbashを開いたときに.bashrc読み取られました。 私が仮想端末でログインすると、.bash_profile読み取られ、次に読み取ら.profileれ.bashrcます。 sshを使用してログインすると、動作は仮想端末に似ています。 すべての場合で.profile、.bashrc読んで、私の環境がセットアップされました。 そのため、gnome 3.22はwaylandを使用し、waylandは読み取りを行いません.profile。上記のような効果が得られるように、初期化ファイルを設定するにはどうすればよいですか? 特定のファイル(など.profile)が読み取られることを主張していないことに注意してください。私が望むのは、自分の環境を賢明な方法でセットアップすることです。つまり、bash固有の設定をbash初期化ファイルに保持し、他の設定を他の初期化ファイルに保持したいということです。また、設定を別のファイルにコピーしないようにします。 私はArch Linuxを使用しています。すべてのディストリビューションに対する回答を歓迎します。回避策を提案するときは、副作用と長所と短所も説明してください。 2017年11月の更新:私が理解している限り、gnome開発者は、ログインシェルの構成ファイル(.profileおよび.bash_profilebashの場合)がログイン後に提供されることを人々が期待していることを認めています。テキストまたはグラフィカルログインに関係なく。そのため、上記の私のユースケースは再び機能します。 まだgnome開発者はログインシェルの起動を避けたいと考えています。彼らが行っている方向は、systemdから環境化されたものを使用することです。 https://in.waw.pl/~zbyszek/blog/environmentd.html すべてのログイン方法が環境に適応するまでには時間がかかるようです。

5
bashとfishの間で環境変数を共有する
bashスクリプトとfishスクリプトは互換性がありませんが、bashとfishの両方によって初期化されるいくつかの環境変数を定義するファイルが欲しいです。 私の提案する解決策は、次の~/.envような環境変数のリストを含むファイルを定義することです。 PATH="$HOME/bin:$PATH" FOO="bar" 次に、bashでソースを作成し、それをfish形式に変換するスクリプトを作成し、fishのソースを作成します。 私はこれよりも良い解決策があるかもしれないと考えていたので、bash fish間で環境変数を共有するより良い方法を求めています。 注:OS Xを使用しています。 以下は、.envfishとbashの両方をとんでもない魚の構文を使って処理したいファイルの例です(〜/ binと〜/ bin2は空のディレクトリであると仮定します): setenv _PATH "$PATH" setenv PATH "$HOME/bin" setenv PATH "$PATH:$HOME/bin2" setenv PATH "$PATH:$_PATH"


1
systemdサービスで環境変数を設定する方法
Ubuntuに正しくインストールされているROSを使用しています。 ROSを実行するには、まずsource /opt/ros/kinetic/setup.bashを実行する必要がありroscoreます。roscoreなしsource setup.bashで実行すると、コマンドroscoreが見つかりません。 ここで、システムの起動中にROSを実行したいと思います。 私はこのリンクを読みました:https : //askubuntu.com/questions/814/how-to-run-scripts-on-start-up カスタムサービスファイルを作成してに追加するだけでよいようです/etc/systemd/system/。しかし、それでもsource setup.bash実行する前に必要な環境変数を設定する必要があるため、何をすべきかわかりませんroscore。 サービスファイルで環境変数を設定することは可能ですか?私の必要に応じて、これらの環境変数roscoreを、システムの実行だけでなくシステム全体にも設定する必要があります。 私は別のアイデアを持っています。つまり、これらの環境変数をに設定/etc/profileし、コマンドのみのサービスファイルを記述しますroscore。それは機能しますか?


2
環境変数は、Linux上の非特権ユーザーに表示されますか?
Linuxでは、プロセスの環境変数が他の(root以外の)ユーザーによって観察可能かどうかを判断しようとしています。 差し迫ったユースケースは、環境変数に秘密を入れることです。これはウェブ全体の多くの場所で安全ではないと議論されていますが、Linuxの正確な露出ポイントに焦点を合わせることができませんでした。 私は平文の秘密をファイルに入れることについて話していないことに注意してください。また、ルートアカウントへの露出については話していないことに注意してください(私は、ルートを非スターターとして攻撃者から秘密を隠そうと試みていると考えています)。 この質問は、環境変数を完全にセキュリティなし、または単に難読化されていると分類するコメントで、私の質問に対処しているように見えますが、どのようにアクセスしますか? 私のテストでは、1人の非特権ユーザーがプロセステーブル(「ps auxwwe」)を介して別のユーザーの環境変数を監視できません。環境変数を設定するコマンド(例:エクスポート)は、プロセステーブルに追加されないシェル組み込みコマンドであり、拡張により/ proc / $ pid / cmdlineにはありません。/ proc / $ pid / environは、プロセス所有者のUIDによってのみ読み取り可能です。 おそらく、混乱は異なるオペレーティングシステムまたはバージョン間のものです。Web上のさまざまな(最近の)ソースは環境変数の安全性を非難していますが、異なるLinuxバージョンのスポットチェックは、少なくとも2007年まで遡ってこれが不可能であることを示しているようですテストする手)。 Linuxでは、非特権ユーザーは他のプロセスの環境変数をどのように監視できますか?


2
「while IFS = read ..」では、なぜIFSは効果がないのですか?
何か間違っているかもしれませんが、IFDを事前実行/完了リストのコマンドの 1つとして設定してもまったく効果がないことは納得できそうです。以下のスクリプトに示されているすべての例で は、外側のIFS(構造の外側while)が優先されます。 何が起きてる?この状況でIFSが何をするかについて間違った考えを持っていますか?配列分割の結果は、「expected」列に示されているとおりであると予想しました。 #!/bin/bash xifs() { echo -n "$(echo -n "$IFS" | xxd -p)"; } # allow for null $IFS show() { x=($1) echo -ne " (${#x[@]})\t |" for ((j=0;j<${#x[@]};j++)); do echo -n "${x[j]}|" done echo -ne "\t" xifs "$IFS"; echo } data="a b c" echo -e "----- -- …

2
「エクスポート」コマンドの用途は何ですか?
1つのターミナルウィンドウで環境変数を作成し、それを別のターミナルウィンドウにエコーしようとしました。それは何も表示しませんでした。 $TEST=hello その後、私はそれをエクスポートechoし、別のターミナルウィンドウでもう一度試しました。結果は以前と同じでした。 export TEST しかし、ログイン時に同じコードを実行すると(コードを~/.profileファイルに追加)、変数は任意のターミナルウィンドウで使用できます。ここで何が起きてるの?端末でコードを実行することと、ログイン時に同じコードを実行することの違いは何ですか?

1
tmux.confファイルで環境変数を使用する
tmux.confファイルで環境変数を使用することは可能ですか?default-pathを環境変数に設定しようとしています。現在私が試しているのは: set -g default-path $MYVAR さらに、私ができるように$ MYVARがすでに設定されているかどうかを確認したいと思います。 if($MYVAR == "") set-environment -g MYVAR /somepath/ 何か案は?

2
sshを介してコマンドを実行すると、ドットファイルが取得されない
プログラムを対話形式で実行すると、問題なく動作します。 ssh somehost $ ~/some/path/somescript.py sshでプログラムを直接実行すると、機能しません。ソースされていないPYTHONPATHため、変数は設定されて.bashrcいません。 ssh somehost ~/some/path/somescript.py を実行するとssh somehost 'source ~/.bashrc; ~/some/path/somescript.py'、正常に動作します。 しかし、後者はtcshを使用していて、まったく持っていないなど、他の一部の人には機能しません~/.bashrc。 何がすべてのシェルのために働く別のホスト上でssh経由の事を実行するコマンドは?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.