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

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

5
環境変数とは正確には何ですか?
これVARIABLE=valueにより環境変数がexport VARIABLE=value作成され、現在のシェルで作成されたプロセスで使用できるようになります。envは現在の環境変数を示していますが、どこにありますか?環境変数(またはそのことについては環境)を構成するものは何ですか?

5
シェル変数にはどのようなスコープがありますか?
シェル変数のスコープが明確ではないことを示す問題に遭遇しました。 を使用しようとしていましたbundle install。これは、値を使用$GEM_HOMEして作業を行うRubyコマンドです。私は設定$GEM_HOMEしましたが、コマンドは、使用するまでその値を無視しexportましたexport GEM_HOME=/some/path。 これにより、変数が何らかの形で「グローバル」(環境変数とも呼ばれます)になることを読みましたが、その意味がわかりません。私はプログラミングのグローバルについては知っていますが、異なるプログラムについては知りません。 また、このような変数の設定が現在のシェルセッションにのみ適用される場合、たとえばデーモン化されたプロセスに対してどのように設定しますか? シェル変数にはどのようなスコープがありますか?

1
エクスポートされるシェル変数とbashにないシェル変数の違い
Bashは、エクスポートされた変数とエクスポートされていない変数を区別するようです。 例: $ FOO=BAR $ env | grep FOO $ set | grep FOO FOO=BAR set変数を見ますが、見envません。 $ export BAR=FOO $ env | grep FOO BAR=FOO $ set | grep FOO BAR=FOO FOO=BAR set両方の変数が表示envされますが、エクスポートされた変数のみが表示されます。 私はそれsetがbash組み込みであり、そうでenvはないことを知っています。 エクスポートされる変数とエクスポートされない変数の違いは何ですか?

3
suの実行時に.bash_profileが取得されない
たとえばuser1、ユーザーに変更があり.bash_profile、そのうちの1人がを変更しますPATH(例:)export PATH=/some/place:$PATH。この変更user1は、としてログオンするか、を実行すると正常に機能しますsu - user1。 しかし、suas を介してコマンドを実行しようとするとroot、たとえば: su -c test.sh oracle (テストにはが含まれますecho $PATH) 変更されているPATH(または、ルートのPATH問題)ようではありません。また、にコピーしようとし.bash_profileましたが.profile、役に立ちませんでした。 なぜこうなった?

5
ファイル内の環境変数を実際の値に置き換えますか?
ファイル内の環境変数を置換/評価する簡単な方法はありますか?私がconfig.xml含むファイルがあるとしましょう: <property> <name>instanceId</name> <value>$INSTANCE_ID</value> </property> <property> <name>rootPath</name> <value>/services/$SERVICE_NAME</value> </property> ...等。$INSTANCE_IDファイル内のINSTANCE_ID環境変数$SERVICE_NAMEの値とSERVICE_NAMEenv varの値を置き換えます。どの環境変数が必要かを先験的に知りません(または、誰かが構成ファイルに新しい環境変数を追加した場合にスクリプトを更新する必要はありません)。ありがとう!

2
〜は常に$ HOMEに等しい
これはおそらく以前に尋ねられたことを知っていますが、Googleで見つけることができませんでした。 与えられた Linuxカーネル $ HOMEを変更する構成はありません バッシュ ウィル~ == $HOME真でありますか?

5
Ubuntuでsudoが$ HOMEを変更しないように設定する方法と、この動作を無効にする方法は?
Ubuntu 12.04ではsudo -s、$ HOME変数が変更されないため、通常のユーザーがのregularuser場合、状況は次のようになります。 $ cd $ pwd /home/regularuser $ sudo -s # cd # pwd /home/regularuser 私はかなり前にUbuntuを放棄したので、確信はありませんが、これはデフォルトの動作だと思います。だから、私の質問は: Q1。これはどのように行われますか?構成はどこにありますか? Q2。無効にするにはどうすればよいですか? 編集: 答えをありがとう、それは少し物事を明確にしたが、私は私が探している答えを得るために、いくつかの質問を追加する必要があると思います。 Q3。Debian sudo -sでは、$ HOME変数をに変更し/rootます。私が答えから得たものとman sudo一緒に走ったシェルsudo -sは、で与えられたもの/etc/passwdですよね? Q4。ただし、UbuntuとDebianの両方/etc/passwdでrootに指定されたシェルは/bin/bashです。どちらのシステムでも、$ HOMEに関する限り、.profileor .bashrcファイルの違いがどこにあるかを見つけることができないため、の動作がsudo -s異なります。これに関する助けはありますか?

7
sudoとsuを介して実行する場合、PATH変数が異なるのはなぜですか?
私のfedora VMで、ユーザーアカウントで実行している場合/usr/local/bin、次のパスにあります。 [justin@justin-fedora12 ~]$ env | grep PATH PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/justin/bin そして同様に実行するときsu: [justin@justin-fedora12 ~]$ su - Password: [root@justin-fedora12 justin]# env | grep PATH PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/justin/bin ただし、を介して実行する場合sudo、このディレクトリはパスに含まれません。 [root@justin-fedora12 justin]# exit [justin@justin-fedora12 ~]$ sudo bash [root@justin-fedora12 ~]# env | grep PATH PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/sbin:/bin:/usr/sbin:/usr/bin 経由で実行するとパスが異なるのはなぜsudoですか?

3
ドット(。)を含む変数をエクスポートする
ドットを含む変数をエクスポートする方法。試したときに「無効な変数名」が表示されます: export my.home=/tmp/someDir -ksh: my.home=/tmp/someDir: invalid variable name メタキャラクターのドット(。)をエスケープしても助けにはなりませんでした $ export my\.home=/tmp/someDir export: my.home=/tmp/someDir: is not an identifier



5
再アタッチするときにtmuxでenv変数を再設定する必要があるのはなぜですか?
私は主にMacで作業し、Linuxマシンにssh / tmuxを接続して作業をしています。Linuxマシンでssh-agentを実行しています。私が持っています set -g update-environment "SSH_AUTH_SOCK SSH_ASKPASS WINDOWID SSH_CONNECTION XAUTHORITY" 私の.tmux.conf。それでも、このセッションに再接続するたびに、実行する必要があります tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK 新しいtmuxウィンドウを$SSH_AUTH_SOCK正しく設定するため。これをする必要はありません。何か案は? 更新 私はこれをうまく説明していないと思います。リモートマシンでシェルを開くためのシェル関数を次に示します。 sshh () { tmux -u neww -n ${host} "ssh -Xt ${host} $*" } tmuxのは、このsshのコマンドを実行すると、$SSH_AUTH_SOCKされないことがあっても、設定された私のローカル環境で設定してください。setenv上記のコマンドを使用してtmuxの環境にこれを配置すると、すべてが正常に機能します。私の質問は、なぜsetenvコマンドを実行する必要があるのですか? 更新2 詳しくは: 既存のセッションにアタッチする$SSH_AUTH_SOCKと、tmux環境(またはグローバル環境)で設定されません。 % tmux showenv | grep -i auth_sock -SSH_AUTH_SOCK 手動で設定すると、動作します: % tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK …


3
変数を使用してPS1のターミナルカラーコードを格納しますか?
私の.bashrcでは、ANSIターミナルのカラーコードを使用して、さまざまなビットを色分けしています。次のようになります。 PS1='\u@\h:\w\[\033[33m\]$(virtual_env)\[\033[32m\]$(git_branch)\[\033[0m\]$ ' どこvirtual_envとgit_branch標準出力に出力のものというbashの関数です。 さて、読みやすく変更しやすくするために、色コードを直接に埋め込むのではなく、変数に色コードを保存して参照したいと思いPS1ます。だから私はこのような変数の束を持っています: GREEN="\[\033[32m\]" YELLOW="\[\033[33m\]" RESET="\[\033[0m\]" 次のようなものを書きたいです。 PS1='\u@\h:\w${YELLOW}$(virtual_env)${GREEN}$(git_branch)${RESET}$ ' しかし、これは機能しません-エスケープされているように、色コードがプロンプトに表示されます。代わりに二重引用符を使用すると、色は正しく機能PS1しますが、プロンプトは変更したときにのみ変化しますsource ~/.bashrc。 私は人々が見た他のことを試しました-をprintf使用して、色に一重引用符を使用し、色変数の代わりに\[and \]を入れPS1ますが、何もうまくいかないようです。 カラーコードに変数を使用するにはどうすればよいですか?

7
シバングの複数の引数
shebang行(#!)を介して実行可能ファイルに複数のオプションを渡す一般的な方法があるかどうか疑問に思っています。 私はNixOSを使用していますが、私が書くスクリプトの最初の部分は通常/usr/bin/envです。私が遭遇する問題は、その後に来るすべてがシステムによって単一のファイルまたはディレクトリとして解釈されることです。 たとえば、bashposixモードで実行されるスクリプトを書きたいとします。シバンを書く簡単な方法は次のとおりです。 #!/usr/bin/env bash --posix ただし、結果のスクリプトを実行しようとすると、次のエラーが生成されます。 /usr/bin/env: ‘bash --posix’: No such file or directory 私はこの投稿を知っていますが、より一般的でクリーンなソリューションがあるかどうか疑問に思っていました。 編集:Guileスクリプトには、マニュアルのセクション4.3.4に記載されている、目的を達成する方法があることを知っています。 #!/usr/bin/env sh exec guile -l fact -e '(@ (fac) main)' -s "$0" "$@" !# ここでのトリックは、2番目の行(で始まるexec)がコードとして解釈されますshが、#!... !#ブロック内にあるため、コメントとして解釈されるため、Guileインタープリターによって無視されることです。 このメソッドをインタープリターに一般化することはできませんか? 2番目の編集:少し遊んだ後、から入力を読み取ることができるインタープリターのstdin場合、次のメソッドが機能するようです: #!/usr/bin/env sh sed '1,2d' "$0" | bash --verbose --posix /dev/stdin; exit; ただし、sh通訳が仕事を終えるまでプロセスは存続するため、おそらく最適ではありません。フィードバックや提案をいただければ幸いです。

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