使用任意启动脚本运行 tcsh

使用任意启动脚本运行 tcsh

我想创建一个新的实例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

我们的解决方案包括两个步骤。

  1. 将包含您想要源脚本路径的环境变量传递给新tcsh实例。
  2. 使用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”选项结合使用,以实现交互:)

相关内容