简体   繁体   中英

How can I get the name of the sourced script in tcsh?

I'm looking for a way to get the name of a script that's being sourced from another script that's being executed in tcsh.

If I needed to the the name of a script being executed (not sourced), it's $0 . If I need to get the name of a script that's being sourced from the command line, I can get it from $_ . But when an executed script sources a script, I get an empty value for $_ in the sourced script, so I can't get the script name or pathname from that.

I'm looking for a non-manual method for getting that information.

There isn't really anything for this; source is mostly just a way to read the file and run it in the current scope.

However, it does accept arguments; from the tcsh manpage:

   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'.

So for example source file.csh file.csh will have argv[1] set to file.csh .

Another option is to simple set a variable before the source command:

set src = "file.csh"  # Will be available in file.csh
source file.csh

If you can't or don't want to modify the source call then you're out of luck as far as I know. (t)csh is an old crusty shell with many awkward things, large and small, and I would generally discourage using it for scripting unless you really don't have any option available.

$_ simply gets the last commandline from history; maybe, very maybe it's possible to come up with a super-hacky solution to (ab)use the history for this in some way, but it seems to me that just typing the filename twice is a lot easier.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM