6

呼び出し元のcshシェルでいくつかのenv変数を設定するために使用されるスクリプトがあります。これらの変数の一部は、スクリプトの場所によって異なります。

ファイルが適切なcshスクリプトである場合、$ 0を使用してアクセスできます__FILE__が、sourceを使用してスクリプトを実行すると、cshまたはtcshと表示されます。

これを使用して親シェルに変数を設定しているので、sourceを使用する必要があります。

何をすべきか?

4

4 に答える 4

3

ファイルの最初の行にアクセス$_すると、ソースされている場合はファイルの名前が含まれます。直接実行する場合$0は、名前が含まれます。

#!/bin/tcsh
set called=($_)
if ($called[2] != "") echo "Sourced: $called[2]"
if ($0 != "tcsh") echo "Called: $0"
于 2010-12-03T04:08:43.210 に答える
2

これは読みにくいですが、実際には機能します。

スクリプトの名前がtest.cshの場合

/usr/sbin/lsof +p $$ | \grep -oE /.\*test.csh

于 2013-04-29T16:01:22.113 に答える
1

この回答lsofは、csh/tcshの下でネストされたソースファイルに対して機能する可能性があると思われる唯一の方法とgrepマジックについて説明しています。

スクリプトの名前が次の場合source_me.tcsh

/usr/sbin/lsof -p $$ | grep -oE '/.*source_me\.tcsh'
于 2019-06-07T14:21:14.827 に答える
0

サブシェル$$内でソースを呼び出すと、は機能しません。BASH_PIDbashでのみ機能します。

% (sleep 1; source source_me.csh)

私は次の作品が少し良くなることを発見しました:

% set pid=`cut -d' ' -f4 < /proc/self/stat`
% set file=`/usr/sbin/lsof +p $pid|grep -m1 -P '\s\d+r\s+REG\s' | xargs | cut -d' ' -f9`

最初の行は、ファイルを調達している現在のプロセスのpidを見つけます。これは、$$が親プロセスと同じIDを返すのはなぜですか?。2行目は、通常のファイルの読み取り用に開かれた最初の(できれば唯一の)FDを検索します。これは上記のengtechから来ました。

于 2020-06-28T05:47:15.413 に答える