
Когда я запускаю, 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 $$
Я думаю, что на все ваши вопросы есть ответы. Если у вас все еще есть сомнения, вы можете обратиться кэта исходная статья.