在linux csh脚本中覆盖$_的值

在linux csh脚本中覆盖$_的值

我想在 linux csh 脚本中覆盖 $_ 的值。

我使用 cmdline 在 xterm 中运行此脚本:

chmod +x test.csh
test.csh

测试.csh内容:

#!/usr/bin/tcsh
....
source sourceme.rc
....

sourceme.rc内容:

...  
set cmd = "import sys; import os; print os.path.abspath(os.path.join(os.path.dirname(sys.argv[2]),'checkenv.py'))"
set checkenv = `python -c "$cmd" $_`
...

sourceme.rc 中的 $_ 值应为“源sourceme.rc“ 如果 ”源sourceme.rc" 直接在 xterm 中执行。

但是,那源sourceme.rc使用 csh 脚本运行,而不是使用 xterm 直接获取它,因此 $_ 值为空。

我看见这里$_ 没有改变,但是有没有办法覆盖 test.csh 中 $_ 的值?例如

设置 _ = 某个值

鉴于我们不想编辑sourceme.rc的内容

谢谢

答案1

你将无法做到这一点很好地

在 中tcsh$_始终获取输入缓冲区的内容(在非交互式 shell 中为空),并且无法覆盖它。

这个拼凑可能有效(ymmv):

set lastline = 'source sourceme.csh'
sed 's/\$_\>/$lastline/g' sourceme.csh | source /dev/stdin

bash与、dash等不同tcsh,如果它不是外部命令,则将在当前进程中运行管道的右侧,因此 中的任何命令或变量分配都sourceme.csh将在主 shell 中发生。

相关内容