スクリプトを介してシェルを変更する方法は?

スクリプトを介してシェルを変更する方法は?

次を何度も繰り返す必要があり、自動化したいと思います。

sudo su
tcsh
cd $workDir

これ$workDirはに設定されています~/.tcshrc。 2つのシェルスクリプトを書いてみました。スクリプト1temp.sh

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

スクリプト2temp.csh

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

しかし、期待どおりに動作しません。つまり、cshellプロンプトは表示されず(スクリプトのない方法とは異なり、まだbashプロンプトにあります)、$ workDirにCDを挿入しません。ヘルプ/アドバイスがありますか?

答え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( ) で対話型シェルが実行されsudo su、シェルが終了すると csh スクリプトが実行されます。繰り返しますが、temp.cshスクリプトは最初に対話型tcshを実行し、終了する前に現在のディレクトリを変更します。

cshスクリプトをrootとして実行するには、次のようにします。

sudo ./temp.csh

tcshの対話型インスタンスをrootとして実行するには(私の考えではこれがあなたが望むものだと思います)、次のように実行します。

sudo tcsh

特定のディレクトリでtcshインスタンスを実行するには、sudoを実行する前にディレクトリを変更してください。

cd /path/to/directory && sudo tcsh

多くのインストールではsudoほとんどの環境が消去されるため、ラッパースクリプトに設定された環境変数が tcsh セッションで使用可能になることを期待しないでください。

/etc/csh.login~/.login構成ファイル(およびログインシェル/etc/csh.cshrcとすべてのtcshインスタンス)を除いて、~/.cshrctcshセッションの開始時に実行されるスクリプトを渡すことはできません。いくつかの初期コマンドを実行するには、そのコマンドを入力します~/.cshrc(おそらく条件付き構成内)。あるいは、プログラムの実行、環境変数の設定、現在のディレクトリの変更などのコマンドの場合は、次のようにラッパースクリプトを使用できます。これはシェル環境の変更には機能しません(たとえば、csh変数の設定に使用されます)。 )set

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

関連情報