次を何度も繰り返す必要があり、自動化したいと思います。
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インスタンス)を除いて、~/.cshrc
tcshセッションの開始時に実行されるスクリプトを渡すことはできません。いくつかの初期コマンドを実行するには、そのコマンドを入力します~/.cshrc
(おそらく条件付き構成内)。あるいは、プログラムの実行、環境変数の設定、現在のディレクトリの変更などのコマンドの場合は、次のようにラッパースクリプトを使用できます。これはシェル環境の変更には機能しません(たとえば、csh変数の設定に使用されます)。 )set
。
#!/bin/tcsh
# commands go here
cd $workdir
setenv foo bar
exec tcsh