2017-12-27 7 views
0

私は数年前にUNIXで作業していましたが、もう一度やり直しています。誰かが私の質問に私を助けることができるかどうか疑問に思っていた。UNIXでシェルを変更する有効な方法

たとえば、私がbashにいる場合、私はchsh --shell /bin/tcshの後にパスワードを入力するよう求められます。 echo $SHELLと言ってみると、シェルが変わったとは言えません。それはまだ私がbashで、Cシェルではないことを私に伝えます。だから私は終了して再起動する必要があります。一度ログバックすると、、次には、私はCシェルであると伝えます。

もっと効果的なシェル変更方法がありますか?私がログインしたりログアウトする必要がないものはありますか?

ありがとうございます。

+3

'tcsh'と' echo $ 0'だけを実行してください。 '$ SHELL'に依存することはできません。たとえば、' man bash'を参照してください。 –

+1

あなたは$ SHELLに頼ることができますが、その目的はあなたがどのシェルにいるのかを知らせることではありません。その唯一の目的はあなたが好むシェルを他のプログラムに伝えることです。プログラムがシェルを起動する必要がある場合は、環境変数SHELLの値をチェックし、その値を使用する必要があります。 –

+1

'$ SHELL'は、' '現在のユーザのログインシェル*のフルパス名*」(' man bash'から)です。現在のシェルである必要はありません。 – cdarke

答えて

0

CHSH(1):あなたがCHSHであなたのシェルを変更したらログインシェル

を変更すると、自動的にそのシェルにあなたは、端末を開くたびにログインする必要があります。

あなただけの直接そのシェルを実行して、一時的に別のシェルを使用する場合:「tcshの」、「zshの」などを...

スクリプトの使用シェバングのために特定のシェルを使用する場合は、「# ! "

例 - シェルスクリプトの最初の行に次のスクリプトがSHで実行される(そして、あなたのシステム上で利用可能な任意のシェルのためにこれを行うことができます)を保証します:

#!/bin/sh 
0

は、必ずあなたのを確認してください

echo $0 

このようにして、実行しているプロセス(現在のシェル)を取得できます。 $ SHELLを出力すると、サーバにログインしたときに開くデフォルトのシェルが返されます。

ubuntu$ echo $SHELL 
/bin/bash 
ubuntu$ echo $0 
-bash 
ubuntu$ sh 
\[\e[31m\]\u\[\e[m\]$ echo $SHELL 
/bin/bash 
\[\e[31m\]\u\[\e[m\]$ echo $0 
sh 
\[\e[31m\]\u\[\e[m\]$ 

よろしく!

+1

'$ 0'は信頼できないことに注意してください。これは幾分病理学的であると私は同意しますが、以下を考慮してください: 'rm -f/bin/csh; ln/bin/bash/bin/csh; csh; echo $ 0' –

+0

@WilliamPursell特定の特定のケースでは$ 0は信頼できないが、ほとんどの通常のケースではそうだと私は同意する。そして、あなたのサンプルケースは病理学的なもので、誰かが本当に意図しているとすれば、あなたがどこで何を実行しているのかわからないような方法でシステムを本当に混乱させる可能性がありますが、あなたのサーバーを制御します。先に進んでイメージを再作成する方がよいでしょう。 :P –

関連する問題