如何通过脚本更改shell?

如何通过脚本更改shell?

我必须多次重复以下操作,因此我想自动化它。

sudo su
tcsh
cd $workDir

这里$workDir设置在~/.tcshrc.我尝试编写两个 shell 脚本。脚本1是temp.sh

#!/bin/bash
sudo su
./temp.csh

脚本2是temp.csh

#!/usr/bin/tcsh
tcsh
cd $workDir

但它没有按预期工作,即我没有看到 cshell 提示符(仍然在 bash 提示符上,与没有脚本的方法不同),也没有 CD 进入 $workDir。有什么帮助/指点吗?

答案1

用于workDir="/dev/"; sudo su -c tcsh -c "cd $workDir; echo \$PWD"在脚本期间更改文件夹。

只要记住逃离一切即可$

编辑

你为什么不这样做:

sudo ./tcsh.csh

tcsh.csh 内部包含:

#!/usr/bin/tcsh
cd $workDir  # need to set $workDir somewhere, depends on you
blabla

答案2

你可以做这样的事情(使用这里-文档):

tcsh<<EOF
command1
command2
(...)
EOF

答案3

当你跑步时

sudo su
./temp.csh

这将以 root ( ) 身份执行交互式 shell sudo su,然后当该 shell 终止时,将执行 csh 脚本。同样,该temp.csh脚本首先执行交互式 tcsh,然后在退出之前更改其当前目录。

要以 root 身份执行 csh 脚本,请运行

sudo ./temp.csh

要以 root 身份执行 tcsh 的交互式实例(我认为这就是您想要做的),请运行

sudo tcsh

要在特定目录中执行该 tcsh 实例,请在运行 sudo 之前更改目录。

cd /path/to/directory && sudo tcsh

请注意,在许多安装中,sudo会擦除大部分环境,因此不要期望包装器脚本中设置的环境变量在 tcsh 会话中可用。

/etc/csh.login除了配置文件(以及~/.login登录 shell/etc/csh.cshrc~/.cshrc所有 tcsh 实例)之外,您无法传递要在 tcsh 会话开始时执行的脚本。如果您想运行一些初始命令,请将它们放入~/.cshrc(可能位于条件构造内)。或者,对于仅执行程序、设置环境变量、更改当前目录等的命令,您可以使用如下所示的包装脚本;这对于更改 shell 环境(例如,使用 来设置 csh 变量)不起作用set

#!/bin/tcsh
# commands go here
cd $workdir
setenv foo bar
exec tcsh

相关内容