Mac OS X(iTerm)でzshをログインシェルとして実行するにはどうすればよいですか?


149

Mac OS Xでzshがログインシェルとして設定されている場合、iTermで起動すると、zshはログインシェルとして実行されているとは見なしませんが、「-zsh」(「-」はarg [0]の最初の文字)これは、ログインシェルとして開始する必要があることを意味します。

そのため、ログインシェルをbashに設定すると、bashはこの最初の「-」を$ 0で認識してログインシェルとして実行しますが、zshはそうではありませんが、そうではありません。

zshにarg [0]の「-」を認識させる方法、またはiTermに--loginコマンドライン引数を指定してシェルを実行させる方法はありますか?


2
質問されてからしばらく経っていますが、@ Harold Putmanの回答を受け入れることを検討してください。質問に答えるのはそれだけです。
クレイグS.コッティンガム

回答:


106

iTerm-> Preferences-> Profiles Tab-> Generalセクションで、コマンドを/ bin / zsh --loginに設定します。

/ bin / zsh --login


1
iterm2の[全般]タブにこのオプションがないようです。ログインシェルを変更せずにiterm2で実現する方法はありますか?
ロイド・デウルフ、2014

6
これは、[プロファイル]タブの一般的なタブです。
Harold Putman 2014

ああ!これは、[全般]タブと[プロファイル]> [全般]の両方があるので混乱しています。
ロイド・デウルフ2014

2
または私の場合/usr/local/bin/zsh --login
Yar

これは、/ etc / shellsを編集するのではなく、シェルを変更するために使用しています。これにより、更新後にシェルが使用できなくなるという問題を防ぐことができます。
2017

220
chsh -s $(which zsh)

パスワードの入力を求められますが、設定を更新すると、そのマシンで開始する新しいiTerm / Terminalセッションはデフォルトでzshになります。


2
最初に質問を読んでください。問題はデフォルトのシェルの設定にありません。問題は、zshがログインシェルとして起動されたことを検出していないことです。
Ivan Tarasov、

1
あ、ごめんなさい。-iフラグを使用して、zshを強制的に対話モードで開始しようとしましたか?
Damien Wilson、

11
彼の答えは、iTermのMac OS Xでzshをログインシェルとして実行することです。それはあなたがしようとしていることを説明する方法でそれをやろうとしないだけです。しかし、それはあなたが(本文ではなくタイトルで)質問する問題を解決します。本文で終わる質問は、まったく別の質問です。それがあなたの本当の質問である場合(zshをログインシェルとして実行する方法ではなく)、おそらくタイトルの質問を書き直す必要があります。
iconoclast

45
場合はchsh、あなたに「非標準シェル」のような何かを伝え、それはあなたがに新しいシェルのパスを追加しなければならないことを意味します/etc/shells。これは、たとえば、homebrewによってインストールされたzshのバージョンに変更する場合に発生します/usr/local/bin/zsh
shovavnik 2014年

1
chsh -s $(which zsh)正しいパスを確保するために使用できます。
Daniel Doezema 2014年

56

[ システム環境設定]の [ ユーザーとグループ]ペインに移動します->ユーザーを選択します-> ロックを変更するには(左下隅)->現在のユーザーを右クリックして[ 詳細オプション ]を選択します -> ログインシェルを選択 / bin / zshとOK


3
これは私の日を救った。私はosx mavericksにいます。
2014

これは、brewによってインストールされたzshではなく、デフォルトのzshに対して機能します。
イマームBux

19

起動時にシェルを変更するコマンドはchsh -s <path_to_shell>です。Mac OS Xのデフォルトのシェルはbinディレクトリ内にインストールされるため、デフォルトに変更するzsh場合は、次のコマンドを使用します

chsh -s /bin/zsh

の異なるバージョンを使用している場合は、非標準のシェルメッセージを回避するために、zshそのバージョンを追加する必要がある場合があり/etc/shellsます。たとえば、自作バージョンがzsh必要な場合は/usr/local/bin/zsh、前述のファイルに1つのコマンドsudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells"で追加して実行する必要があります。

chsh -s /usr/local/bin/zsh

または、1つのコマンドですべてを実行したい場合は、zshがすでにインストールされている場合は、これをコピーして貼り付けます。

sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells" && chsh -s /usr/local/bin/zsh

2
この回答に反対票を投じることは公平ではなかったと思います。/etc/shellsそれ自体が答えの本文で言及しているのは小道具なので。
heymatthew

1
@heymatthewそれが反対票を投じられている理由は、それが尋ねられた質問に答えなかったためです。それは全く異なる無関係な質問に答えました。
タビタ

17

アカウント設定でシェルエントリを編集してみましたか。

[アカウント]設定に移動し、ロックを解除して、[ 詳細設定 ]ダイアログのユーザーアカウントを右クリックします。シェルは/ bin / zshである必要があり、その呼び出しを適切に編集できます(つまり、-login引数を追加します)。


残念ながら、これは機能しません。chshを使用して好きなシェルを設定できます(/ etc / shellsにこのシェルがリストされている限り)。ただし、シェルにコマンドライン引数を追加することはできません(iTermは失敗します)シェルを起動します)。
Ivan Tarasov、

OS Xでは一部の構文が変更されていますが、ブライアンが上で示したように、デフォルトのシェルを/ bin / zshに設定することが重要です
engineerDave

7
私はSOが大好きです。私はたった今この答えを使用しましたが、それから4年近く前にそれを書いたことに気づきました。
Brian Agnew 2013年

-2

loginユーティリティを使用して、ログインシェルを作成します。ログインするユーザーのユーザー名がAliceで、zshがインストールされていると仮定します/opt/local/bin/zsh(たとえば、MacPortsを介してインストールされた最新バージョン)。iTerm 2で、[設定]、[プロファイル]に移動し、設定するプロファイルを選択して、次のコマンドを入力します。

login -pfq Alice /opt/local/bin/zsh

man loginオプションの詳細については、を参照してください。


これは100%答えではありません。はいはデフォルトでスポーンするシェルを変更しますが、それはシェルの「ログイン」インスタンスを作成する方法、つまりすべての変数を最初からリソース作成する方法に関する答えではありません。
タビサ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.