script open macosx mac commands app macos shell

macos - open - Cómo obtener shell predeterminado



terminal app mac (5)

Podemos ejecutar algo como chsh -s /usr/local/bin/zsh para establecer un nuevo shell predeterminado. ¿Hay un comando que podamos ejecutar para saber qué es ese shell?

No me refiero a tener un terminal abierto y ejecutar un comando para saber en qué shell estamos, quiero decir, como en el ejemplo anterior, si estoy en un terminal con /bin/bash abierto, ¿qué debo ejecutar para obtener /usr/local/bin/zsh si es el shell predeterminado actual?


En OS X, usando el comando env | grep -i ''SHELL'' env | grep -i ''SHELL'' produce una salida como: SHELL=/bin/sh (como root, sin embargo, los usuarios normales tienden a tener / bin / bash como shell predeterminado) con un pequeño análisis, la ruta del shell (y por lo tanto el shell sí mismo) podría ser fácilmente identificado y extraído de allí ..


Puede grep en el archivo / etc / passwd para el nombre de usuario actual, y usar cortar para extraer la columna de información apropiada:

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

$(id -un) es más seguro que $USER para obtener el nombre de usuario. Usar ^ delante del nombre de usuario y : después se asegura de que no obtenga una coincidencia falsa si su nombre de usuario es una subsección de otro nombre de usuario.

$SHELL también se puede utilizar, como se sugiere. Sin embargo, no funcionará si se utilizó chsh en el shell actual, ya que la variable no se actualiza. Además, la variable no está protegida contra el cambio, por lo que teóricamente puede configurarse en algo completamente diferente.

Actualizar para intentar una solución compatible con OS X. Probablemente no sea la expresión regular óptima

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

Esto se basa en la identificación del usuario. Si falta la entrada completa del usuario, no solo el nombre de usuario, entonces osx debe almacenar este en otro lugar.


Si desea obtener el shell predeterminado de un usuario, puede grep el /etc/passwd . me gusta:

kent$ grep "$USER" /etc/passwd kent:x:1000:1000::/home/kent:/bin/zsh

diciéndome que el usuario actual (kent) tiene shell /bin/zsh predeterminado

Si solo quieres atrapar la parte de la concha:

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

Si desea obtener el shell predeterminado de otro usuario, simplemente reemplace la parte $ USER.


para macOS

dscl . -read /Users/username UserShell


puedes usar el siguiente comando echo $SHELL