Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I am sourcing a file under tcsh. This file could be anywhere on the filesystem. How can I retrieve the path of my sourced file ?

$0 won't work : I don't execute the file, I source it.

Many thanks !

share|improve this question
add comment

4 Answers 4

up vote 1 down vote accepted

A little bit of grepping gives me what I want.

There is one thing I know for sure : the basename of the file (not the whole path). In my case, source_me.tcsh. So we can query lsof for the current shell PID and grep the absolute path.

$$ gives you the PID.

/usr/sbin/lsof +p $$ | grep -oE /.\*source_me.tcsh
share|improve this answer
    
This is the only answer to this problem that I haven't been able to break in trivial testing. kudos. –  engtech Apr 29 '13 at 16:01
add comment

You can try following, which should work in normal (t)csh. I do not know if it also works in the .(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
share|improve this answer
add comment

As far as I know sourcing means that you run it as if you were typing the commands one by one in the command line. Then, of course, you can't access its name, because he's not being executed as a script in the first place.

But you might be lucky: try to look in the command log. In bash you just type "history", dunno about tcsh but I guess there must be one there too.

share|improve this answer
add comment

While this is possible in other shells, I don't see a way to do it in tcsh.

share|improve this answer
    
How would you do in bash ? –  Charles May 7 '10 at 10:10
    
As shown in my answer at the link in my answer above, ${BASH_SOURCE[0]} is the location of the sourced file. –  Dennis Williamson May 7 '10 at 11:13
    
Ooops, sorry, didn't see the link... –  Charles May 8 '10 at 10:48
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.