Назад | Перейти на главную страницу

tcsh: путь к исходному файлу

Я ищу файл под tcsh. Этот файл может быть где угодно в файловой системе. Как я могу получить путь к исходному файлу?

$ 0 не сработает: я не выполнять файл, я источник Это.

Большое спасибо !

Если вы не хотите использовать lsof, используйте ниже только для csh.

set script_path = `ls -l /proc/$$/fd | sed -e 's/^[^/]*//' | grep "/script_name"`

$$ это pid текущего запущенного потока.

Независимо от того, какой метод (полученный пользователем или в другом сценарии) вызывается, сценарий также открывается. Таким образом, фильтруя содержимое fd, вы получите реальный путь к скрипту.

Это также работает, когда скрипт мягко связан с другим путем!

Немного grepping дает мне то, что я хочу.

Одно я знаю точно: базовое имя файла (а не весь путь). В моем случае source_me.tcsh. Таким образом, мы можем запросить lsof для текущего PID оболочки и grep абсолютный путь.

$$ дает вам PID.

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

Вы можете попробовать следующее, что должно работать в обычном (t) csh. Я не знаю, работает ли это также в. (T) cshrc:

#!/bin/csh
set DUS = ( $_ ) #DUS: Dollar UnderScore
set DNU = $0:q   #DNU: Dollar NUll
if (( $#DUS > 1 )) then
  if ("${DUS[1]}" == 'source' || "$DNU:t" == 'tcsh' || "$DNU:t" == 'csh') then
    set DNU = ${DUS[2]:q}
  endif
endif
echo 'Your script path is: '`(cd "$DNU:h" >&! /dev/null; pwd)`
echo 'your script name is: '$DNU:t

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

Но может вам повезет: попробуйте посмотреть в журнале команд. В bash вы просто набираете "history", не знаю о tcsh но я думаю, что там тоже должен быть один.

Хотя это возможно в другие снаряды, Я не вижу способа сделать это в tcsh.