Какую оболочку я запускаю?

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

В чем может быть причина?

36 голосов | спросил coffeMug 16 +04002013-10-16T17:12:36+04:00312013bEurope/MoscowWed, 16 Oct 2013 17:12:36 +0400 2013, 17:12:36

4 ответа


47

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

ps $$

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

ps -p $$

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

8773 pts/10   00:00:00 tcsh

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

ответил terdon 16 +04002013-10-16T17:20:11+04:00312013bEurope/MoscowWed, 16 Oct 2013 17:20:11 +0400 2013, 17:20:11
8

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

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

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

ответил jamespfinn 16 +04002013-10-16T18:15:58+04:00312013bEurope/MoscowWed, 16 Oct 2013 18:15:58 +0400 2013, 18:15:58
1

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

lsof -a -p $$ -d txt

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

lsof -a +D /bin +D /usr/bin -p $$ -d txt
ответил 8 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 08 Sep 2015 19:05:18 +0300 2015, 19:05:18
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 21 Jam1000000amSun, 21 Jan 2018 00:37:28 +030018 2018, 00:37:28

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132