我想创建一个新的实例tcsh
并获取任意脚本的源代码,只需一步即可。问题是,当我使用该-c
选项时,脚本完成后,shell 实例就会关闭。因此,在下面简单的例子命令pushd
成功完成但 shell 退出:
tcsh -c "pushd ~/some/directory/of/interest"
我如何获取修改环境的脚本并在该环境中以交互方式工作?ssh
这在与或等程序结合使用时非常有用screen
,如下所示:
ssh -t user@host 'tcsh -c "source ~/test_environment.csh"'
答案1
我们的解决方案包括两个步骤。
- 将包含您想要源脚本路径的环境变量传递给新
tcsh
实例。 - 使用
tcsh
此环境变量指向的脚本
对于步骤 1 ssh
,将运行您在默认 shell(目标服务器中的命令/etc/passwd
)中指定的命令,因此我将为您提供几种解决方案。
- 如果目标 shell 是
sh
/bash
:使用命令连接到 ssh 服务器:ssh -t user@host 'export SOURCESCRIPT=/tmp/tmp.sh; exec /usr/bin/tcsh'
- 如果目标 shell 是
csh
/tcsh
:使用命令连接到 ssh 服务器:ssh -t user@host 'setenv SOURCESCRIPT /tmp/tmp.sh; exec /usr/bin/tcsh'
- 如果您可以修改目标的 ssh 服务器配置,请添加/修改
AcceptEnv
选项以/etc/ssh/sshd_config
允许SOURCESCRIPT
传递环境变量(例如AcceptEnv SOURCESCRIPT
),SOURCESCRIPT
在本地环境中设置并使用命令连接:ssh -t -o SendEnv=SOURCESCRIPT user@host 'exec /usr/bin/tcsh'
对于步骤2,我们修改~/.tcshrc
添加以下内容:
if $?SOURCESCRIPT then
source $SOURCESCRIPT
endif
答案2
如果我错了请纠正我,但您不能使用 tcsh 的“-m”选项来加载启动脚本吗?我刚刚阅读了手册页,并认为您可能能够将“~/.tcshrc”文件设置为指向另一个脚本的符号链接。如果命令出现问题,也许您可以尝试“-e”或“-m”选项。
希望这可以帮助!
编辑:或者您可以将“-i”选项与“-c”选项结合使用,以实现交互:)