gpt4 book ai didi

linux - 无法在 .cshrc 中获取脚本源

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:16 29 4
gpt4 key购买 nike

我正在使用的一个库有一个脚本来设置适当的环境变量:

# Source this script to set up the ROOT build that this script is part of.
#
# Conveniently an alias like this can be defined in ~/.cshrc:
# alias thisroot "source bin/thisroot.sh"
#
# This script if for the csh like shells, see thisroot.sh for bash like shells.
#
# Author: Fons Rademakers, 18/8/2006

# $_ should be source .../thisroot.csh
set ARGS=($_)
set THIS="`dirname ${ARGS[2]}`"
setenv ROOTSYS "`(cd ${THIS}/..;pwd)`"

set path = ($ROOTSYS/bin $path)

if ($?LD_LIBRARY_PATH) then
setenv LD_LIBRARY_PATH $ROOTSYS/lib:$LD_LIBRARY_PATH # Linux, ELF HP-UX
else
setenv LD_LIBRARY_PATH $ROOTSYS/lib
endif

if ($?DYLD_LIBRARY_PATH) then
setenv DYLD_LIBRARY_PATH $ROOTSYS/lib:$DYLD_LIBRARY_PATH # Mac OS X
else
setenv DYLD_LIBRARY_PATH $ROOTSYS/lib
endif

if ($?SHLIB_PATH) then
setenv SHLIB_PATH $ROOTSYS/lib:$SHLIB_PATH # legacy HP-UX
else
setenv SHLIB_PATH $ROOTSYS/lib
endif

if ($?LIBPATH) then
setenv LIBPATH $ROOTSYS/lib:$LIBPATH # AIX
else
setenv LIBPATH $ROOTSYS/lib
endif

if ($?PYTHONPATH) then
setenv PYTHONPATH $ROOTSYS/lib:$PYTHONPATH
else
setenv PYTHONPATH $ROOTSYS/lib
endif

if ($?MANPATH) then
setenv MANPATH `dirname $ROOTSYS/man/man1`:$MANPATH
else
setenv MANPATH `dirname $ROOTSYS/man/man1`
endif

如果我在命令行中运行该脚本,它就可以正常工作,例如

source /home/sm/packages/root/bin/thisroot.csh

但是,如果我尝试将该命令添加到我的 .cshrc 文件中,它会失败并显示错误消息:

ARGS: Subscript out of range.

什么给了?

最佳答案

这一行似乎是问题所在:

set ARGS=($_)

根据 tcsh(1) 手册页:

$_ Substitutes the command line of the last command executed. (+)

“(+)”表示这是一个 tcsh 特有的特性(尽管我的 Linux 系统上的 /bin/bsd-csh 似乎也支持它)。

一个快速实验表明,如果我输入

source foo.csh

在交互式 tcsh 提示符下,它将 $_ 设置为字符串 source foo.csh —— 但是如果我从 csh 或 tcsh 脚本执行相同的命令,它没有。 (如果脚本使用csh运行,$_设置为/usr/bin/tcsh;如果脚本使用运行>tcsh$_ 设置为空字符串。)

据我所知,这种不一致的行为在任何地方都没有记录——而且 csh(1) 手册页根本没有提到 $_

(这种不一致在使用 csh/tcsh 时很常见。您会发现 Bourne shell sh,以及从它派生的 shell,例如 kshbashzsh 的行为更加一致。强制性链接:Csh Programming Considered Harmful )。

关于linux - 无法在 .cshrc 中获取脚本源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11893735/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com