Подтвердить что ты не робот

В какую оболочку я вхожу?

Есть ли команда для идентификации имени/типа текущей оболочки, пути к двоичному файлу оболочки и версии оболочки?

Мне не нужно все это, но чем больше я могу получить, тем лучше.

Мне нужно что-то такое же, что и у uname, pwd, whoami. Просто простая утилита с простым выходом. (который пока не появился:/)

re ps

$ ps -o comm $$
COMM
-bash

Почему -bash вместо полного пути, как это было бы со всем остальным? Какая сделка с тире?

4b9b3361

Ответ 1

Мне нужно что-то такое же, что и у uname, pwd, whoami. Просто простая утилита с простым выходом.

Поэтому, по-видимому, вывод состоит в том, что инструмент, который я хочу, не существует, и нет простого кросс-платформенного способа сделать это.

Некоторые ответы здесь отлично работают в Linux.

Ответ 2

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

echo $0

Это выводит либо текущую рабочую оболочку, либо путь к текущей запущенной оболочке, в зависимости от того, как она была вызвана. Может потребоваться некоторая обработка:

prompt:~$ echo $0
/bin/bash
prompt:~$ sh
sh-4.0$ echo $0
sh
sh-4.0$ exit
exit
prompt:~$ /bin/sh
sh-4.0$ echo $0
/bin/sh
sh-4.0$

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

Ответ 3

Если вы не укажете программу в строке shebang, я верю /bin/sh будет использоваться. К сожалению, я не верю, что есть хороший переносимый способ определить, что такое оболочка.

Если вы находитесь на, например, Linux, вы можете узнать исполняемый путь через /proc:

$ readlink "/proc/$$/exe"
/bin/dash

и получить исполняемое имя легко через ps $$.

Но это не поможет вам с типом оболочки (кроме как с помощью таблицы поиска известных оболочек), ни с версией (AFAICT, даже нет возможности получить версию из тире)

Ответ 4

Попробуйте ($$ - переменная оболочки, заданная для обработки идентификатора оболочки):

ps -ef | grep $$

или попробуйте это (/proc/self - это идентификатор процесса aloso оболочки):

ps -ef | grep /proc/self

Что касается "- bash" - тире означает, что он находится в командной строке. Введите bash снова, и теперь вы увидите, что оболочка просто "bash" (без тире)

Ответ 5

Я думаю, что "палец" - это тот, который вы ищете. Попробуйте эту команду:

finger `whoami`

Ответ 6

Вместо того, чтобы пытаться определить оболочку, которая используется в настоящее время, обычно более целесообразно просто повторно выполнять команду в качестве требуемой оболочки. Это может быть не что иное, как историческое обходное решение того факта, что нет надежного, переносимого способа определить оболочку, которую вы в настоящее время используете. Лучше всего написать script для работы как можно большего количества оболочек, чтобы это не проблема. (например, важна переносимость, независимо от того, сколько людей хотят утверждать, что "bash есть везде" )

Ответ 7

Вы можете использовать следующее в Arch Linux.

echo $SHELL

Ответ 8

Это показывает мне более надежный результат.

ls -la /bin/sh