gpt4 book ai didi

csh - 如何让 csh 获取文件然后进行交互?

转载 作者:行者123 更新时间:2023-12-04 12:49:02 25 4
gpt4 key购买 nike

简短的

我如何 (1) 启动一个新的 csh,(2) 强制它执行一些不在任何 .cshrc 中的命令(尽管我可以将它们安排在非标准位置以获取源)和(3)然后去互动?

例如。除了在 http://www.manpagez.com/man/1/tcsh/ 中描述的那些之外,还有什么方法可以让 csh 或 tcsh 起诉备用启动文件? ,它说

我已经知道了

启动和关闭
登录 shell 从执行系统文件中的命令开始
/etc/csh.cshrc 和/etc/csh.login。然后它执行来自的命令
用户主目录中的文件:首先是 ~/.tcshrc (+) 或者,如果
找不到~/.tcshrc,~/.cshrc,然后~/.history(或者
histfile shell 变量),然后是 ~/.login,最后是 ~/.cshdirs(或
dirsfile shell 变量的值)(+)。外壳可能会读取
/etc/csh.login 之前而不是之后/etc/csh.cshrc 和 ~/.login
之前而不是之后 ~/.tcshrc 或 ~/.cshrc 和 ~/.history,如果是这样
编译;查看版本 shell 变量。 (+)

   Non-login  shells read only /etc/csh.cshrc and ~/.tcshrc or ~/.cshrc

细节

我是 bash 用户。但我在一家硬件公司工作,(1) 很多人是 csh 用户,(2) 许多 CAD 工具依赖于环境中的东西,例如模块系统。

许多食谱 - 例如人们解释如何做事的内部 wiki 页面 - 从类似的开始
start a new shell or xterm
source /proj/Foo/setup.proj
source ~some_engineer/env/setup-for-this-tool
now run the tool

环境变量经常发生冲突;有时我必须删除我所有的 ~/.* 文件,重新使用 ssh 等。

我想自动化其中的许多。事实上,我已经自动化了其中的许多。但是,我不得不通过使用 expect(实际上是 Perl CPAN Expect)来使它们自动化,以假装自己是一个交互式用户。

在此过程中,我有自己的脚本 clear-env,我经常使用它来启动几乎没有环境变量的 shell。如此使用:
clear-env -keep HOME -- csh
and then either pipe commands in through expect
or run interactively

这适用于自动化。但有时我确实需要互动——但只有在我加载了几行长源脚本名称之后。

我希望能够加载这些源文件,然后回退到交互式。

例如。我试过了
clear-env -keep HOME -- csh -c 'source filename' -i
...

或者,没有我的 clear-env
csh -c 'source filename' -i
...

希望它会执行 -c 命令,然后变成交互式的。但它只执行 -c 命令。

我已经能够在我自己的 perl 脚本中通过 expect 向 csh 提供命令,该脚本读取我的 tty,然后通过 expect 将命令输入 csh。但是,然后我失去了 csh 的交互功能。

有没有更好的办法?以某种方式说“从现在开始,我希望您将您的控制终端重新连接到另一个终端?”

谢谢。

顺便说一句,这对其他 shell 也很有用。然而,根据我的经验,csh 用户最容易编写必须手动执行的配方。

--

也许我不清楚:

我知道
 exec tcsh -c "source stuff ; exec bash"


exec csh -c "源代码;执行 csh"

情况是我已经通过 Expect 使用“交互式”命令驱动了工具、脚本。

现在,在我完成了那个伪交互设置之后,最后我想回到真正的交互状态。基本上,将 shell 的控制终端从 Expect 使用的 pty 更改为真正的 pty。

我已经能够通过创建转发过程来做到这一点。

但我希望我可以切换。或者做类似的事情
... long
... sequence
... of expect commands
exec csh -i < /dev/my-pty ...

最佳答案

我有同样的问题。我正在使用 bash,并且有一个软件包,该软件包仅在您处于 csh 提示符并获取名为 nemo_start 的文件时才有效。 .这是解决方案:

me@machine:~/nemo$ csh -c "source nemo_start; csh" # This is bash.
FALCON set to /home/me/nemo/usr/dehnen/falcON
machine:~/nemo% tsf # This is csh already.
Insufficient parameters, try 'help=', 'help=?' or 'help=h' or 'man tsf',
Usage: tsf in=??? ...
type contents of a (binary) structured file

这个 tsf除非文件来源正确并且保留了环境变量和别名,否则命令将不可用。

关于csh - 如何让 csh 获取文件然后进行交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8982288/

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