#linux #unix #tcsh
Вопрос:
Я ищу способ получить имя сценария, который был получен из другого сценария, выполняемого в tcsh.
Если бы мне нужно было указать имя выполняемого сценария (без источника), это так $0
. Если мне нужно получить имя сценария, получаемого из командной строки, я могу получить его из $_
. Но когда выполняемый сценарий создает сценарий, я получаю пустое значение для исходного $_
сценария, поэтому я не могу получить из него имя или путь к сценарию.
Я ищу не ручной метод получения этой информации.
Ответ №1:
На самом деле для этого нет ничего; source
в основном это просто способ прочитать файл и запустить его в текущей области.
Тем не менее, он принимает аргументы; со страницы tcsh
руководства:
source [-h] name [args ...]
The shell reads and executes commands from name. The commands
are not placed on the history list. If any args are given,
they are placed in argv. ( ) source commands may be nested; if
they are nested too deeply the shell may run out of file
descriptors. An error in a source at any level terminates all
nested source commands. With -h, commands are placed on the
history list instead of being executed, much like `history -L'.
Так, например source file.csh file.csh
, придется argv[1]
установить на file.csh
.
Другой вариант-просто установить переменную перед source
командой:
set src = "file.csh" # Will be available in file.csh
source file.csh
Если вы не можете или не хотите изменять source
вызов, то, насколько я знаю, вам не повезло. (t)csh-это старая жесткая оболочка со многими неудобными вещами, большими и маленькими, и я бы вообще не рекомендовал использовать ее для написания сценариев, если у вас действительно нет доступных опций.
$_
просто получает последнюю командную строку из истории; может быть, очень может быть, можно придумать супер-хакерское решение (ab)использовать историю для этого каким-то образом, но мне кажется, что просто ввести имя файла дважды намного проще.