我想在 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 中发生。