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

39

Когда я запускаю, 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.

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

coffeMug
источник
tcsh/cshимеет свою текущую оболочку в$shell
HongboZhu

Ответы:

48

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

ps $$

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

ps -p $$

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

8773 pts/10   00:00:00 tcsh

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

Тердон
источник
Вы знаете, как я могу проверить, какой файл конфигурации загружен? (который bashrc)
coffeMug
@Coffe_Mug не уверен, что ты имеешь в виду. Вы можете установить оболочку по умолчанию с chsh, .bashrcбудет считываться , только если вы i) запускаете bash и ii) запускаете ее как интерактивную оболочку, не входящую в систему. Как вы входите в эту машину?
Тердон
У меня есть скрипт, который запускает эту оболочку bash из оболочки tcsh.
coffeMug
4
Почему бы не простоps $$
CJM
1
@cjm почему бы и нет, ответ отредактирован.
Тердон
8

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

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

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

jamespfinn
источник
1

Это работает для Linux:

lsof -a -p $$ -d txt

или, если вам нужен более сильный выбор (больше систем):

lsof -a +D /bin +D /usr/bin -p $$ -d txt

источник
1

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

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

Хорошо для устранения неполадок в труднодоступных местах это все. Приветствия.

todd_dsm
источник