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

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

2
単一のプログラム実行の言語を設定する
完全なC ++ i18n gettext()「hello world」の例。プログラムを実行する前に、エクスポートを使用してLANG環境変数を設定します(Linux): export LANG=es_MX.utf8 ./hellogt コマンドライン引数のように、hellogtの実行中に言語を設定する方法はありますか?これは、プログラムのテストに便利です。

2
環境変数を設定するコマンドのプレフィックスとして変数を使用できないのはなぜですか?
通常、次のように接頭辞を付けることで、コマンドの環境変数を設定できます。 hello=hi bash -c 'echo $hello' また、変数を使用して、次のようなコマンド呼び出しの任意の部分を置き換えることができることも知っています。 $ cmd=bash $ $cmd -c "echo hi" # equivalent to bash -c "echo hi" 環境変数を設定するコマンドの前に変数を使用できないことを知って、私は非常に驚きました。テストケース: $ prefix=hello=hi $ echo $prefix # prints hello=hi $ $prefix bash -c 'echo $hello' hello=hi: command not found 変数を使用して環境変数を設定できないのはなぜですか?プレフィックス部分は特別な部分ですか?前にevalを使用することで機能させることができましたが、それでも理由がわかりません。bash 4.4を使用しています。

2
関数名で%%はどういう意味ですか?
の出力を見ると、env次の関数もあることがわかりました。 BASH_FUNC_mc%%=() { . /usr/share/mc/mc-wrapper.sh } /usr/share/mc/mc-wrapper.shファイルの内容は次のとおりです。 MC_USER=`id | sed 's/[^(]*(//;s/).*//'` MC_PWD_FILE="${TMPDIR-/tmp}/mc-$MC_USER/mc.pwd.$$" /usr/bin/mc -P "$MC_PWD_FILE" "$@" if test -r "$MC_PWD_FILE"; then MC_PWD="`cat "$MC_PWD_FILE"`" if test -n "$MC_PWD" && test -d "$MC_PWD"; then cd "$MC_PWD" fi unset MC_PWD fi rm -f "$MC_PWD_FILE" unset MC_PWD_FILE 何をする%%文字は、関数名に意味ですか?特定の場合に呼び出される関数にしますか、それとも他の関数とは異なる方法で呼び出すことができますか? openSUSE 42.3とBashバージョン4.3.42(1)-release(x86_64-suse-linux-gnu)を使用していますが、違いがある場合は、

3
コマンドのbashスクリプトの一時的な値
以下のコマンドのように、 if true; then IFS=":" read a b c d e f <<< "$test" 本は、IFS ":"メインコマンド(read a b c d e f <<< "$value")の前に値割り当てコマンド()を使用すると、その値が一時的にメインコマンドで有効になると述べています。したがって、readコマンドは区切り文字を使用します:。 しかし、このコマンドのように、 if true; then HOME="hello" echo "$HOME" エコーメッセージはhelloではありません。上記のコマンドの本当の意味は何ですか?


2
posixシェル:環境変数名のリストを出力します(値なし)
複数の実装で機能するposix互換の方法で、現在定義されている環境変数のリストをそれらの値なしで出力するにはどうすればよいですか? 一部の実装(mksh、freebsd / bin / sh)では、export単独で使用するだけで十分です。 $ export FOO2 FOO ただし、他の一部の実装(bash、zsh、dash)ではexport、値も表示されます。たとえば、bashの場合: $ export export FOO2='as df\ asdk=fja:\ asd=fa\ asdf' export FOO='sjfkasjfd kjasdf:\ asdkj=fkajdsf:\ :askjfkajsf=asdfkj:\ safdkj' $ printenv | sed -n l FOO2=as\tdf\$ asdk=fja:\$ asd=fa\$ asdf$ FOO=sjfkasjfd kjasdf:\$ asdkj=fkajdsf:\$ \t:askjfkajsf=asdfkj:\$ safdkj$ 他のオプションのような、envまたはprintenv値のない変数名のみを出力するオプションはありません。少なくとも、私が試したlinuxおよびfreebsdプラットフォームではそうではありません。 awk / sed / etcへのパイピング。または、パラメーター展開手法(例:)を使用してリストをトリミングする${foo%%=*}こともできますが、行をまたがる可能性が=あり、値に空白が含まれる可能性がある値を処理する必要があります(上記の例を参照)。 特定のシェル実装に固有の回答は興味深いですが、私は主に実装間で互換性のあるものを探しています。

3
Windows環境変数PATHEXTに相当するUnixはありますか
Windows環境変数に相当するUnixがあるかどうか疑問に思っていますPATHEXT。 Windowsの背景がない場合:PATHEXTcmd.exeにそのサフィックスを入力せずにスクリプトを実行できるようにするファイルサフィックスを追加します。たとえば、私のWindowsコンピューターでは、PATHEXTにサフィックスが含まれており.pl、cmd.exeでPerlスクリプトを実行したい場合は、単に入力するだけでmy-script実行されます。それでも、bashで同じスクリプトを実行するには、完全な名前を記述する必要がありますmy-script.pl。 私は現在WindowsとUnixの両方で作業しているため、ほとんどの場合、Unixボックスに再び行くときにサフィックスを入力するのを忘れるという罠に陥ります。

3
環境変数に基づく条件付き割り当て
bashスクリプトでは、値が外部のグローバル環境変数($MYAPP_ENV)に依存するように、ローカル変数を割り当てています。 if [ "$MYAPP_ENV" == "PROD" ] then SERVER_LOGIN=foobar123@prod.example.com else SERVER_LOGIN=foobar987@test.example.com fi 上記の割り当てを書くためのより短い(まだクリーンな)方法はありますか?(おそらく何らかの条件演算子/インラインを使用している場合)

2
すべてのエンターでzsh update自体のRPROMPTをどのように作成しますか?
私RPROMPTはを使用してsvn情報を表示するように設定されていますvcs_info。読みますRPROMPT=${vcs_info_msg_0_}。vcs_infoを使用して呼び出されprecmd()ます。ただし、ディレクトリを変更してもRPROMPTは更新されません。これは、プロンプトを(ソース〜/ .zshrcまたはpromptによって)再度呼び出した場合にのみ機能し、プロンプトを再度呼び出さない限り、chdirで変更されません。この動作を変更する方法はありますか?

2
#!/ usr / bin / env bashがシステムで動作しないのはなぜですか?
彼らが不満を言ういくつかのインストールスクリプトを実行すると、私はいくつかの問題に遭遇しましたbad interpreter。 ささいな例を作成しましたが、問題が何であるか理解できません。以下を参照してください。 #!/usr/bin/env bash echo "hello" 上記のスクリプトを実行すると、次のエラーが発生します [root@ech-10-24-130-154 dc-user]# ./junk.sh bash: ./junk.sh: /usr/bin/env: bad interpreter: No such file or directory /usr/bin/envファイルには、以下を参照してください、存在します。 [root@ech-10-24-130-154 dc-user]# ls -l /usr/bin/env lrwxrwxrwx 1 root root 13 Jan 27 04:14 /usr/bin/env -> ../../bin/env [root@ech-10-24-130-154 dc-user]# ls -l /bin/env -rwxr-xr-x 1 root root 23832 Jul 16 …


4
Vimからシェルアウトするときにシェルエイリアスを使用できるようにするにはどうすればよいですか?
私では.zshrc、いくつかのエイリアスを宣言しています。たとえば、which dbstartそのエイリアスの内容を表示します。 そのシェルからvimを開いた場合、それは子プロセスです。Vimでは、シェルコマンドをで実行できます:! some_command。私が行う場合は:! echo $0Vimが使用しているシェルかを見るために、それは/ binに/ zshの'を出力します。ただし、私のエイリアスは使用できません。 Vimからシェルアウトするときに、通常のシェルエイリアスを使用できるようにするにはどうすればよいですか? 2つのアイデア: どういうわけかEXPORT、元のシェルからその子プロセスへvim、そして再びそのシェル子プロセスへのエイリアス .zshrcサブシェルを作成するときに自分を読むようにVimを構成する



3
`_`はbashシェルの環境変数はいつですか?
Bashマニュアルでは次のように述べています(manpage、私の強調): Bashが外部コマンドを呼び出すと、変数$_はコマンドの絶対パス名に設定され、環境内のそのコマンドに渡されます。 そして(特別なパラメータ): _ ($_、アンダースコア。)シェルの起動時に、実行中のシェルまたはシェルスクリプトを呼び出すために使用される絶対パス名を、環境または引数リストで渡されたとおりに設定します。その後、展開後に、前のコマンドの最後の引数に展開します。また、そのコマンドにエクスポートされた環境で実行および配置された各コマンドを呼び出すために使用される絶対パス名に設定します。メールをチェックするとき、このパラメーターはメールファイルの名前を保持します。 bashシェルでは、次のコマンドを実行します。 $ bash $ export | grep '_=' マニュアルによると、_新しいbashシェルの環境変数である必要があります。export新しいbashシェルのすべての環境変数を出力することになっていますが、出力しません _。では_、新しいbashシェルの環境変数はどうなのでしょうか。 実際にはどのbashシェルでも同じことが起こります $ export | grep '_=' 何も出力しません。では_、bashシェルの環境変数はあるのでしょうか。 比較のために: $ dash $ export | grep '_=' export _='/bin/dash' 私の投稿は、マイクのコメントとステファンの返信に触発されました。

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