На якій оболонці я біжу?


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.

Що може бути причиною?


tcsh/cshмає свою сьогоднішню оболонку$shell
HongboZhu

Відповіді:


48

$SHELLце не обов'язково ваша поточна оболонка, це оболонка для входу за замовчуванням . Щоб перевірити оболонку, яку ви використовуєте, спробуйте

ps $$

Це повинно працювати на останніх Unix / Linux з a, psщо підтримує синтаксис BSD. В іншому випадку це портативний (POSIX) спосіб

ps -p $$

Це має повернути щось подібне, якщо ви працюєте tcsh:

8773 pts/10   00:00:00 tcsh

Якщо ви хочете, щоб це tcshбула оболонка за замовчуванням, використовуйте її chshдля встановлення.


Чи знаєте ви, як я можу перевірити, який файл конфігурації завантажений? (що bashrc)
coffeMug

@Coffe_Mug не впевнений, що ти маєш на увазі. Ви можете встановити оболонку за замовчуванням за допомогою chsh, .bashrcвона буде прочитана , лише якщо ви i) запускаєте bash та ii) запускаєте її як інтерактивну оболонку, яка не входить у систему. Як ви входите в цю машину?
тердон

У мене є сценарій, який починає цю баш-оболонку з оболонки tcsh.
coffeMug

4
Чому б не простоps $$
cjm

1
@cjm чому ні, справді, відповідь відредаговано.
terdon

8

З командного рядка ви також можете використовувати $0змінну, щоб визначити, яку оболонку ви використовуєте. наприклад:

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

Примітка: ви не можете визначити оболонку, використовуючи $ 0 в межах сценарію, оскільки $ 0 буде самим сценарієм.


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

Це добре для усунення несправностей у тісних місцях. Ура.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.