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