我有一個腳本用於在調用csh shell中設置一些env vars。其中一些變量取決於腳本的位置。如何在獲取csh腳本時獲取`__FILE__`
如果該文件是一個適當的csh腳本,我可以使用$ 0來訪問__FILE__
,但是如果我使用源代碼運行腳本,它只會告訴我csh或tcsh。
因爲我用它來設置父shell中的變量,我必須使用源代碼。
怎麼辦?
我有一個腳本用於在調用csh shell中設置一些env vars。其中一些變量取決於腳本的位置。如何在獲取csh腳本時獲取`__FILE__`
如果該文件是一個適當的csh腳本,我可以使用$ 0來訪問__FILE__
,但是如果我使用源代碼運行腳本,它只會告訴我csh或tcsh。
因爲我用它來設置父shell中的變量,我必須使用源代碼。
怎麼辦?
如果您在文件的第一行上訪問$_
,它將包含文件的名稱(如果源自該文件)。如果它直接運行,那麼$0
將包含名稱。
#!/bin/tcsh
set called=($_)
if ($called[2] != "") echo "Sourced: $called[2]"
if ($0 != "tcsh") echo "Called: $0"
這很容易中斷: 如果用「;」鏈接命令,則調用將返回錯誤的信息。 `echo HELLO;源test.csh` `HELLO` `來源:HELLO;`` 叫:/斌/ tcsh` ` – engtech 2013-04-29 15:53:06
@engtech:那是因爲`$ _`真正的 「替代品最後執行的命令的命令行。」 – 2013-04-29 16:12:26
這是很難讀,但實際工作:
如果你的腳本被命名爲test.csh
/usr/sbin/lsof +p $$ | \grep -oE /.\*test.csh
另見https://serverfault.com/questions/ 139285/tcsh-path-of-sourced-file – oliver 2017-07-31 11:52:46