Как получить `__FILE__` при поиске сценария csh - PullRequest
5 голосов
/ 02 декабря 2010

У меня есть скрипт, который используется для установки некоторых переменных env в вызывающей оболочке csh. Некоторые из этих переменных зависят от расположения скрипта.

Если файл является правильным сценарием csh, я могу использовать $ 0 для доступа к __FILE__, но если я запускаю сценарий с использованием исходного кода, он просто сообщает мне csh или tcsh.

Поскольку я использую это для установки переменных в родительской оболочке, я должен использовать источник.

Что делать?

Ответы [ 3 ]

2 голосов
/ 03 декабря 2010

Если вы откроете $_ в первой строке файла, он будет содержать имя файла, если он получен.Если он запускается напрямую, то $0 будет содержать имя.

#!/bin/tcsh
set called=($_)
if ($called[2] != "") echo "Sourced: $called[2]"
if ($0 != "tcsh") echo "Called: $0"
1 голос
/ 29 апреля 2013

Это трудно читать, но на самом деле работает:

Если ваш скрипт называется test.csh

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

0 голосов
/ 07 июня 2019

этот ответ описывает, как lsof и немного магии grep - единственная вещь, которая, похоже, имеет шанс работать для вложенных исходных файлов в tcsh:

/usr/sbin/lsof +p $$ | grep -oE /.\*source_me.tcsh
...