39

chsh -s /usr/local/bin/zsh新しいデフォルトシェルを設定するようなものを実行できます。そのシェルが何であるかを知るために実行できるコマンドはありますか?

ターミナルを開いてコマンドを実行して、現在のシェルを知るという意味ではありません。上記の例のように、開いているターミナルにいる場合、それが現在のものである場合/bin/bash、何を実行して取得する必要がありますか/usr/local/bin/zshデフォルトのシェル?

4

5 に答える 5

29

macOS の場合:

dscl . -read /Users/username UserShell

現在の macOS ユーザーの場合:

dscl . -read ~/ UserShell

を使用してインラインでパスを解析するにはsed:

dscl . -read ~/ UserShell | sed 's/UserShell: //'

を使用$SHELLすると、デフォルトのログイン シェルではなく、現在のログイン シェルが報告されます。場合によっては、これらは同じではありません。たとえば、デフォルトのシェルを参照せずに統合ターミナルを開く Visual Studio Code などの IDE で作業する場合です。

さらに、Martin C. Martin が指摘したように、デフォルトのログイン シェルを変更した$SHELL後も変更されない定数です。chsh

于 2017-01-09T17:11:21.593 に答える
4

/etc/passwd ファイルで現在のユーザー名を grep し、cut を使用して適切な情報の列を抽出できます。

grep ^$(id -un): /etc/passwd | cut -d : -f 7-

$(id -un)$USERユーザー名を取得するよりも安全です。^ユーザー名の前と後に使用:すると、ユーザー名が他のユーザー名のサブセクションである場合に、誤った一致が得られないようになります。

$SHELL提案されているように、使用することもできます。ただしchsh、変数が更新されないため、現在のシェルで使用された場合は機能しません。また、変数は変更に対して保護されていないため、理論的にはまったく異なるものに設定できます。

OS X と互換性のあるソリューションを試すために更新します。おそらく最適な正規表現ではありません:

grep ^.*:.*:$(id -u): /etc/passwd | cut -d : -f 7-

これは、ユーザー ID に基づいています。ユーザー名だけでなく、ユーザーエントリ全体が欠落している場合、osx はこれを別の場所に保存する必要があります。

于 2013-05-04T15:01:53.943 に答える
1

ユーザーのデフォルト シェルを取得する場合は、 grep fileを実行できます/etc/passwd。お気に入り:

grep "$USER" /etc/passwd

# kent:x:1000:1000::/home/kent:/bin/zsh

現在のユーザー (ケント) がデフォルトの shell を持っていることを教えてくれます/bin/zsh

シェル部分だけをキャッチしたい場合:

awk -F: -v u="$USER" 'u==$1&&$0=$NF' /etc/passwd

# /bin/zsh

他のユーザーのデフォルト シェルを取得する場合は、$USER の部分を置き換えるだけです。

于 2013-05-04T14:54:24.983 に答える