ルートアクセスなしでzshをデフォルトシェルにする


52

私は学校のコンピューターを使用していますが、のzsh代わりに使用したいと思いbashます。デフォルトのシェルにしたいのです$ chsh -s $(which zsh)が、管理者権限がないなどのコマンドを実行できません。

回避策として開いたときに.bashrc自動的に呼び出すものを自分に入れる方法はありzshますか?

明確にするために、zsh既にインストールされています。


2
はい、ちょうど追加zsh.bashrcのファイル。ログアウトしてログインして完了!
fedorqui 14年

ごめんなさい しかし、質問を終了するために、私はちょうどzsh最初の行に入れますか?

3
zshを.bashrcに配置するbashと、明示的に呼び出された場合でも常に実行されます。.bash_profile代わりに置いてください。
konsolebox 14年

端末設定でzshをデフォルトのシェルとして設定できます(新しいプロファイルを作成します)。
lmaooooo

回答:


68

.bash_profileホームディレクトリに作成し、次の行を追加します。

export SHELL=/bin/zsh
exec /bin/zsh -l

更新:.profileデフォルトのシェルがbashでない場合、一般的なソリューションとして機能する場合があります。.profileZshからも呼び出される可能性があるかどうかはわかりませんが、簡単にチェックすることで安全に実行できます。

export SHELL=/bin/zsh
[ -z "$ZSH_VERSION" ] && exec /bin/zsh -l

の値に依存whichする動的パスを取得するためにも使用できzshます$PATH

export SHELL=`which zsh`
[ -z "$ZSH_VERSION" ] && exec "$SHELL" -l

Linux管理者(root)がデフォルトのシェルをkashなどのbash以外(zshではない)に変更するとどうなりますか?その後.bash_profile、参照されません。.profile代わりにこれを入れてみませんか?
ジョシュアフーバー14年

@JoshuaHuber最後に行ったテスト.profileは機能しませんでした。また.profile、呼び出されZshませんか?冗長になる可能性があります。ただし、まだ確認していません。(更新:それはないように注意してくださいどのような間違いは、私が前に作られ、今の仕事をしてくれました。)を使用して可能な欠点についての任意の考え.profile
konsolebox 14年

1
@konsolebox Bash は、存在しない.profile場合にのみソースを取得し.bash_profileます(.bash_profileもちろん、手動でソースしない限り)。具体的には、ファイルのbashのソース最初のものは、[ .bash_profile> .bash_login> .profile]は認めます。.profilePOSIX(Bourneシェル)互換機能としてのみ検索します。
火砕物

@pyrocrasty確かに。マニュアルで述べたように、「そのファイルを読み込んだ後、〜/ .bash_profile、〜/ .bash_login、および〜/ .profileをこの順序で探し、存在し、読み取り可能な最初のコマンドからコマンドを読み取り、実行します。 」
-konsolebox

これは、使用して新しい端末プロファイル設定するために働いていた代わりに私のシェルの実行カスタムコマンドに変更をzsh.bash_profileそして、.profile(ファイルがさえ、大学のコンピュータ上のFedora 26、実行されなかった)動作しませんでした。
lmaooooo

12

通常chsh、非rootユーザーとして使用できます。ただし、通常はNISやLDAPなどのネットワークユーザーデータベースの何らかの形式を使用するサイトでは無効になっています。代わりにypchsh(NIS)またはchsh.ldap(LDAP)がある可能性があります。

chshまた、通常、いくつかの承認されたシェル(通常はにリストされているシェル)のみを許可し/etc/shellsます。

chshサイトで使用できない場合、またはそのバリアントを使用する場合は、ログインシェルをexecお気に入りのシェルに配置し、SHELL変数がお気に入りのシェルを指すように設定します。

  • ログインシェルがある場合shdashまたはksh:あなたが編集する必要があるファイルです~/.profile。このファイルは、インタラクティブセッションの開始時および非インタラクティブセッションの起動スクリプト(X11セッションなど)によって読み取られるため、注意する必要があることに注意してください:exec現在のプロセスがシェルはインタラクティブです。Bourneシェル(/bin/shSolaris 10以前の)を除きi、オプションリスト($-)の存在により、シェルが対話型であることがわかります。

    preferred_shell=
    if [ -x /bin/zsh ]; then
      preferred_shell=/bin/zsh
    fi
    
    if [ -n "$preferred_shell" ]; then
      case $- in
        *i*) SHELL=$preferred_shell; export SHELL; exec "$preferred_shell";;
      esac
    fi

    zshにを読み取らせたい場合は.zprofile-lオプションを渡します。

  • ログインシェルがの場合、bash上記の手順を実行できます。または、これらのコマンドをに入れることもできます~/.bash_profile。ほとんどのセッションスタートアップスクリプトは読み取りのみで~/.profileあり~/.bash_profile、読み取りではありませんが、bashおよびreadの下で実行されるスクリプトを見.bash_profileたことがありますexec

  • ログインシェルがcshまたはtcshの場合、chshまたは管理者権限なしでのデフォルトシェルの変更の例を参照してください。


1

私はchshこの命令がまさにこの目的のためであると信じています。しかし、私はすべてのLinux / Unixディストリビューションがそれをサポートしているかどうかはわかりません。のmanページを確認してくださいchsh


一部のシステムでは、としても使用していますpasswd -s
ステファンシャゼル

1

chsh管理者権限がないために実行できない場合は、管理者に相談してください

使用しchshているシステムchshが機能しないように構成されているため、たとえば、システムが/etc/passwdファイルだけでなくNISまたはLDAPを使用しているため、非ルートとして使用できない可能性があります。または、システムの管理者が制御を維持したいだけかもしれません。

シェルを変更する手順は、組織のポリシーによって異なります。chsh通常の処理を行うローカルコマンドが存在する場合があります。または、シェルの変更を要求するサポートチケットを送信する必要がある場合があります。

他のほとんどの答えは良いですが、管理者が適度に敏感であれば、スタートアップスクリプトのハッキングを気にしたくないかもしれません。zsh -l管理者がアカウントの更新に取りかかるまで、ログイン後に手動で呼び出すだけです。

留意すべきもう1つのこと:異なるシェルが同じスタートアップファイルを使用できる場合があります。たとえば、shbashの両方を実行することができ$HOME/.profile、かつcshtcshの両方を実行することができます$HOME/.loginし、$HOME/.cshrc(シェル固有のスタートアップファイルは好きなのに.bashrc.bash_profile、および.tcshrcそれらをオーバーライドすることができます)。デフォルトのシェルがで/bin/cshあり、使用したい場合/bin/tcsh.loginを呼び出すように更新すると/bin/tcsh -l無限ループが作成される可能性があります。特定のスタートアップファイルzshを実行することはありませんbashので、それは問題ではありません。

ほとんどのシェルは(あなたが実行しているシェルの特定の変数を設定し$BASH_VERSION$tcsh$ZSH_VERSION)。好みのシェルを起動するためのスタートアップコードを記述する場合、それをで囲むことは悪い考えでifはないので、そのシェルをまだ実行していない場合にのみ実行されます。konsoleboxの答えからのコードを使用して:

if [ "${ZSH_VERSION:-unset}" = "unset" ] ; then
    export SHELL=/bin/zsh
    exec /bin/zsh -l
fi

(未定義の変数への参照をエラーにするオプションである、"${ZSH_VERSION:-unset}"単に実行"$ZSH_VERSION"した可能性を考慮するのではなく、チェックの複雑さを追加しましたset -o unset。)


1

いくつかのシナリオを考えることができます。

  1. zshはにありません/etc/shells。OP zshはコマンドプロンプトで入力することなく使用したいと考えています。可能な解決策。

    a)ログイン時にプロファイルトリックを使用して実行します。これは実際にシェルを変更するのと同じくらい効果的です。

    b)に追加するには、管理者を請うzsh/etc/shellsすることができますので、chshそれへ

    c)管理者にシェルを変更するように頼みます。それがあなたの能力を失うことになるので、これは、賢明ではありませんftpインチあなただけ使用することができftpますが、シェル内を持っている場合/etc/shells

  2. ユーザーが制限されたシェルをエスケープしたいrbash場合rsh

    .profileが編集可能な場合は、PATH編集して展開できます。いったん/binパスにある、あなたがして起動することができますbash内部からrsh/rbashのアクセス獲得し、chshあなたがシェルを変更できるようにするコマンドを。多くのコマンドにはシェルエスケープがあり、これを使用して制限付きシェルをエスケープし、にアクセスできるようになりchshます。

  3. chsh他の理由で実際には機能しません。可能性1からのソリューションaもここでの答えです。

シナリオ2は、実際にデフォルトのシェルを変更する唯一の理由です(制限が厳しすぎます)。


-3

提供された答えが実際zshにデフォルトのシェルを作るとは思わない。ユーザーがデフォルトのシェルにログインするとすぐに、シェルがzshに変更されます。ユーザーは引き続きログインしますDEFAULT SHELLが、これにより、シェルはzsh

デフォルトのシェルを変更するには:

usermod -s /path/to/shell username 

そのためには、rootになる必要があります。

それ以外の場合は、上記の回避策が役立ちます。

コメントから追加

chsh -s /path/to/zsh  # considered as standard as compared to usermod

また、ユーザーが自分で呼び出すこともできます。


4
質問では、システムユーザーデータベース(この回答でrootが必要なビット)を変更することはオプションではないことを明確に示しています。
カレブ14年

3
chsh -s /path/to/zshはより標準的であり、通常は(常にではありませんが)usermod常にそうであるのとは異なり、ルートアクセスを必要としません。したがって、あなたの答えには、問題がすでに機能していないとすでに述べているものよりも多くの問題があります。
ジル 'SO-悪であるのをやめる' 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.