На какой оболочке я работаю?

На какой оболочке я работаю?

Когда я запускаю, echo $SHELLвывод говорит /bin/tcsh, что я запускаю tcshоболочку. Но, например, когда я даю следующую команду

alias emacs 'emacs -nw' 

Я получаю следующую ошибку:

bash: alias: emacs: not found
bash: alias: emacs -nw: not found

и когда я выпускаю, alias emacs="emacs -nw"он работает нормально!

Это сбивает с толку, так как я запускаю, tcshно команды интерпретируются bash.

Что может быть причиной?

решение1

$SHELLэто не обязательно ваша текущая оболочка, этооболочка входа по умолчанию. Чтобы проверить используемую вами оболочку, попробуйте

ps $$

Это должно работать на самых последних Unix/Linux с psподдержкой синтаксиса BSD. В противном случае, это переносимый (POSIX) способ

ps -p $$

Это должно вернуть что-то вроде этого, если вы запустите tcsh:

8773 pts/10   00:00:00 tcsh

Если вы хотите, чтобы это tcshбыла ваша оболочка по умолчанию, используйте chshдля ее установки.

решение2

В командной строке вы также можете использовать $0переменную, чтобы определить, какую оболочку вы используете. Например:

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

Примечание: вы не можете определить оболочку, используя $0 внутри скрипта, поскольку $0 будет самим скриптом.

решение3

Это поправка ко всем лучшим ответам выше. У меня была небольшая проблема с определением тире в какой-то момент; показалось правильным поделиться:

curl -fsSL http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh | sh
ash (dash 0.5.5.1 ff)

curl -fsSL http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh | bash
bash 4.3.30(1)-release

Хорошо подходит для устранения неполадок в узких местах, вот и все. Ура.

решение4

Операционная система Unix/Linux может иметь более одной установленной оболочки. Вы можете ввести следующую команду в терминале, чтобы узнать, какую оболочку вы используете:

Ниже представлен список,

  • Борн Шелл – ш
  • C Shell – csh
  • T Shell – tcsh
  • Корн Шелл – кш
  • Bourn-again Shell – bash
  • Оболочка приборной панели
  • Z-оболочка

Этот список не полный, и существует множество других оболочек.

Файл /etc/shells хранит список всех оболочек, установленных в вашей системе. Просто выполните следующую команду, чтобы узнать установленные оболочки,

$ cat /etc/shells

Запустите команду grep для файла /etc/passwd, чтобы узнать оболочку по умолчанию при входе в операционную систему Unix или Linux.

$ grep john /etc/passwd    

Для той же цели можно использовать переменную $SHELL.

echo $0
$ echo $SHELL

Результат будет выглядеть примерно так, как показано ниже, если вы используетеБаш(Борн Сэйн Шелл) терминал: Если в вашей системе установлено несколько оболочек, вы всегда можете переключить оболочку.

как узнать, какую оболочку вы используете в данный момент?

Просто используйте команду ниже

-bash
$ ps -p $$

Я думаю, что на все ваши вопросы есть ответы. Если у вас все еще есть сомнения, вы можете обратиться кэта исходная статья.

Связанный контент