tcsh: caminho do arquivo originado

3

Estou pesquisando um arquivo no tcsh. Este arquivo pode estar em qualquer lugar no sistema de arquivos. Como posso recuperar o caminho do meu arquivo de origem?

$ 0 não funciona: eu não executo o arquivo, eu o insiro .

Muito obrigado!

    
por Charles 06.05.2010 / 18:49

5 respostas

1

Um pouco de grepping me dá o que eu quero.

Há uma coisa que eu sei com certeza: o nome da base do arquivo (não o caminho completo). No meu caso, source_me.tcsh. Então podemos consultar lsof para o PID atual do shell e grep o caminho absoluto.

$$ fornece o PID.

/usr/sbin/lsof +p $$ | grep -oE /.\*source_me.tcsh
    
por 07.05.2010 / 14:00
2

Se você não quiser usar lsof , use abaixo apenas para csh.

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

$$ é o pid do encadeamento atual em execução.

Não importa qual método (originado pelo usuário ou em outro script), o script seja chamado, também é aberto. Portanto, filtrar o conteúdo de fd irá obter o caminho real do script.

Isso também funciona quando o script é vinculado a outro caminho!

    
por 10.08.2016 / 10:04
1

Você pode tentar seguir, o que deve funcionar no normal (t) csh. Eu não sei se ele também funciona no. (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
    
por 22.06.2012 / 17:17
0

Tanto quanto eu sei sourcing significa que você executá-lo como se estivesse digitando os comandos um por um na linha de comando . Então, é claro, você não pode acessar o nome dele, porque ele não está sendo executado como um script em primeiro lugar.

Mas você pode ter sorte: tente procurar no log de comando . Em bash você acabou de digitar " history ", não sei sobre tcsh , mas acho que deve haver um também.

    
por 06.05.2010 / 19:56
0

Embora isso seja possível em outros shells , não vejo uma maneira de fazer isso em tcsh .

    
por 06.05.2010 / 20:43