重複の可能性あり:
環境変数の取得元を確認する方法
特定の設定が存在するファイルの場所を特定する方法があるかどうか疑問に思います。たとえば、グローバルパラメータがありTMOUT
、それを変更したいのですが、どこで設定されているのかわかりません。これここで既に質問されている質問ですが、コマンドに従って変数の出現順序を調べる以外に利用できる方法があるかどうかを知りたいですenv
。
答え1
このコマンドは実行に長い時間がかかります (システム内のすべてのファイルを調べるため) が、次のファイルが見つかるはずです:
find / -type f -print0 | xargs -0 grep -w 'TMOUT=' /dev/null
別の方法としては、どのような状況で設定されているかを調べることです。たとえば、シェルがログイン シェルでないときに設定されているかどうか ( )、設定されているかどうか ( ) を確認します。env -i bash
内env -i bash --login
のファイル ( 、、など) を手動で確認することもできます。 には環境変数を指定するファイルもいくつかあり、そのいずれにも が設定されている可能性があります。$HOME
.profile
.env
.bashrc
.bash_profile
/etc/
ログイン シェルが の場合、 はksh シェル自体によって設定されているksh
ことがわかります。$TMOUT
編集:上記のコマンドラインのあまり目立たない機能のいくつかを説明します。
この慣用句は非常に一般的です。をデフォルトではなくfind ... -print0 | xargs -0 ...
使用する理由は、 の場合、ファイル名が ASCII NUL で終了するからです。つまり、実際の改行を含むファイル名が正しく表現されます。 にオプションを渡すだけで、は同じ規則を理解できるようになります。-print0
-print
-print0
-0
xargs
xargs
/dev/null
を最初の引数として定期的に渡すという慣例grep
も説明する価値があります。 から読み取るときにはファイルの終わりしか取得しないので/dev/null
、 と一致する空でない文字列は存在grep
しません。したがって、そのファイルにはヒットしません。 grep のコマンド ラインでそれを指定するのは、最後にxargs
grep が実行され、検索するファイルが 1 つだけ残っている場合に正しく対処するためだけです。 grep にファイル引数が 1 つしかない場合は、コマンド ラインを指定せずにヒットを一覧表示します。次のようになります。
~/tmp/t$ echo hello > a
~/tmp/t$ echo hi > b
~/tmp/t$ grep '^h.*' a
hello
~/tmp/t$ grep '^h.*' a b
a:hello
b:hi
答え2
これはあなたの質問に対する正確な答えではありませんが、質問の一部には答えているかもしれません。
StackOverflow: Linux: 環境変数はどこに保存されますか?
編集:
シェルスクリプトをデバッグするときは通常-xを追加します。#!/bin/bash -x
シェルから次のように実行することもできます。bash -x
# su - test
test$ bash -x
unset a r
+ . /etc/bash_completion.d/yast2-completion.sh
**(file sourced)**
++ YAST=/sbin/yast
++ YAST_MODLIST=()
**(variables set from file)**
#....
++ /usr/bin/dircolors -b /etc/DIR_COLORS
+ eval 'LS_COLORS='\''no=00
#....