2010-12-02 44 views
4

我有一個腳本用於在調用csh shell中設置一些env vars。其中一些變量取決於腳本的位置。如何在獲取csh腳本時獲取`__FILE__`

如果該文件是一個適當的csh腳本,我可以使用$ 0來訪問__FILE__,但是如果我使用源代碼運行腳本,它只會告訴我csh或tcsh。

因爲我用它來設置父shell中的變量,我必須使用源代碼。

怎麼辦?

+0

另見https://serverfault.com/questions/ 139285/tcsh-path-of-sourced-file – oliver 2017-07-31 11:52:46

回答

2

如果您在文件的第一行上訪問$_,它將包含文件的名稱(如果源自該文件)。如果它直接運行,那麼$0將包含名稱。

#!/bin/tcsh 
set called=($_) 
if ($called[2] != "") echo "Sourced: $called[2]" 
if ($0 != "tcsh") echo "Called: $0" 
+1

這很容易中斷: 如果用「;」鏈接命令,則調用將返回錯誤的信息。 `echo HELLO;源test.csh` `HELLO` `來源:HELLO;`` 叫:/斌/ tcsh` ` – engtech 2013-04-29 15:53:06

+0

@engtech:那是因爲`$ _`真正的 「替代品最後執行的命令的命令行。」 – 2013-04-29 16:12:26

0

這是很難讀,但實際工作:

如果你的腳本被命名爲test.csh

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