我必须多次重复以下操作,因此我想自动化它。
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