我如何(1)启动一个新的csh,(2)强制它执行一些不在任何.cshrc中的命令(尽管我可以安排它们在非标准位置来源)和(3)然后去互动?
例如,除了http://www.manpagez.com/man/1/tcsh/中描述的那些之外,有没有办法让csh或tcsh起诉备用启动文件,
启动和关闭登录shell首先执行系统文件/etc/csh.cshrc和/etc/csh.login中的命令.然后它从用户主目录中的文件执行命令:first~/.tcshrc(+)或者,如果找不到〜/ .tcshrc,〜/ .cshrc,那么〜/ .history(或者是histfile shell变量的值) ),然后是〜/ .login,最后是〜/ .cshdirs(或dirsfile shell变量的值)(+).shell之前可以读取/etc/csh.login而不是之后的/etc/csh.cshrc和〜/ .login而不是〜/ .tcshrc或〜/ .cshrc和〜/ .history之后,如果这样编译的话; 看到版本的shell变量.(+)
Non-login shells read only /etc/csh.cshrc and ~/.tcshrc or ~/.cshrc
Run Code Online (Sandbox Code Playgroud)
我是一个bash用户.但我在一家硬件公司工作,其中(1)许多人都是csh用户,(2)许多CAD工具依赖于环境中的东西,例如模块系统.
许多食谱 - 例如人们解释如何做事的内部维基页面 - 从类似的东西开始
start a new shell or xterm
source /proj/Foo/setup.proj
source ~some_engineer/env/setup-for-this-tool
now run the tool
Run Code Online (Sandbox Code Playgroud)
环境变量经常发生冲突; 有时我必须删除所有的〜/.*文件,重新删除ssh等.
我想自动化其中许多.实际上,我已将其中许多自动化.但是,我必须使用expect(实际上是Perl CPAN Expect)来自动化它们,以伪装成交互式用户.
一路上,我有自己的脚本clear-env,我经常使用它来启动一个几乎没有环境变量的shell.因此使用:
clear-env -keep HOME -- csh
and then either pipe commands in through expect
or run interactively
Run Code Online (Sandbox Code Playgroud)
这适用于自动化.但有时我确实需要交互 - 但只有在我加载了几行长源脚本名称之后.
我希望能够加载源文件,然后回退到交互式.
我试过了
clear-env -keep HOME -- csh -c 'source filename' -i
...
Run Code Online (Sandbox Code Playgroud)
或者,没有我的明确环境
csh -c 'source filename' -i
...
Run Code Online (Sandbox Code Playgroud)
希望它会执行-c命令然后变成交互式.但它只执行-c命令.
我已经能够通过我自己的perl脚本将命令提供给csh,读取我的tty,然后通过expect将命令传递给csh.但是,我失去了csh的交互功能.
有没有更好的方法?一些说法"从现在开始,我想让你把你的控制终端重新连接到另一个终端?"
谢谢.
顺便说一句,这对其他炮弹也很有用.但是,根据我的经验,csh用户最容易编写必须手动执行的配方.
-
也许我不清楚:
我知道
exec tcsh -c "source stuff ; exec bash"
Run Code Online (Sandbox Code Playgroud)
和exec csh -c"source stuff; exec csh"
情况是我已经通过Expect使用"交互式"命令驱动了工具,脚本.
现在,在我完成了伪交互式设置之后,最后我想回归真正的互动.基本上,将shell的控制终端从Expect正在使用的pty更改为真正的pty.
我已经能够通过创建转发过程来做到这一点.
但我希望能切换.或者做类似的事情
... long
... sequence
... of expect commands
exec csh -i < /dev/my-pty ...
Run Code Online (Sandbox Code Playgroud)
小智 -1
exec tcsh -c "source stuff ; exec bash"
Run Code Online (Sandbox Code Playgroud)
如果“source stuff”应该替换为 (csh) shell 脚本,那么您将处于一个 bash shell,该 bash shell 继承了“source stuff”在 tcsh 中设置的环境。'exec' 意味着您最终不会遇到嵌套的 shell 进程。