$PATH変数の特定の部分がどこに設定されているかを確認する方法があるかどうか疑問に思います。
約1年半前に私が受講していたコースのために、私のコンピュータにOracle XE 11.2.0をインストールするのは面倒です。どこかでタスクを実行するために、$ PATH変数にパス "/u01/app/oracle/product/11.2.0/xe/bin"を追加しました。 Oracle DB固有のルート/ u01 /フォルダを削除したため、bashは起動時にファイルやディレクトリが存在しないというエラーを発生させます。だから私は見つけることができるすべてのファイルを手動で見ましたが、何も見つかりませんでした。
/etc/login.defs
私が知る限り、$ PATHの~/.profile
対応する部分は、、、、またはファイルに設定されていません。/etc/environment
/etc/profile
~/.bash_login
~/.bash_profile
~/.bashrc
cat ~/.bashrc | grep "*oracle*"
まず、上記の各ファイルを実行して確認します。私もクレイジーで、sudo strings /dev/sdb -n 11 | grep -C100 "/u01/app/oracle/*"
その文字列を含むすべてのファイルのリストを実行しました。多くの結果が得られましたが、特に価値のある結果はありませんでした。私の貧しいSSDはそうではありません。
だから提案がありますか? $ PATHの対応する部分がどこに接続されているかをどうやって知ることができますか?確認する必要がある他の一般的なファイルはありますか?範囲を狭めることができる場合は、Linux Mint 18.3で実行しています。
答え1
シェル初期化をデバッグする1つの方法は、ログインインタラクティブシェル()を実行し、すべてのコマンドが実行された-li
ときに印刷するように指示し、出力で必要なものを見つけることです。
PS4=' $BASH_SOURCE:$LINENO: ' bash -lixc true |& grep oracle
PS4
これはbashでオプションの追加情報を印刷するために使用され-x
、に設定されている場合はインポート$BASH_SOURCE:$LINENO
するファイルのパスと実行中の行番号を印刷します。以下を実行すると、-c true |& grep oracle
単一シェルの初期化をすばやくフィルタリングできます。先行スペースを使用すると、bashはネストされたソーシングが発生したときに行が表示されるようにします。
答え2
努力する
grep -lr /u01/app/oracle/product/11.2.0/xe/bin /etc/*
これには、/etc/
パス要素を含むファイルが一覧表示されます。あなたが言ったように、質問にリストされているファイルにない場合は、以下にしてください/etc/
。私の推測は/etc/profile.d/
。
アップデート1
bashを使用すると仮定すると、どのコマンドが実行されたかを確認できbash -v
ますbash -x
。bash -v
ソースソースをダンプし、bash -x
拡張変数を使用して実際に実行されたコマンドをダンプします。これらのフラグは組み合わせることができますが、読みやすさが大幅に低下します。 :)
答え3
文字列を確認することもできますoraenv
。
Oracleデータベース・インストーラは、通常、/usr/local/bin/oraenv
Oracleデータベース・エンジンに必要なすべての環境変数を設定および/usr/local/bin/coraenv
設定解除する一対のスクリプトを生成します。これらのスクリプトの目的は、現在のセッションの環境変数を操作することであるため、「ソース化」する必要があります。さもなければ、あなたが望む効果を得ることはできません。
oraenv
ログインスクリプトに次の内容が含まれている可能性があります。
ORACLE_SID=<database SID here>
ORAENV_ASK=NO
. oraenv
最後の行はsource oraenv
。