URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 83426
[ Назад ]

Исходное сообщение
"Как спросить у шела - кто ты?"

Отправлено Kurk_SS , 20-Дек-08 20:33 
В сети много видел вопросов из серии как узнать какой shell сейчас запущен, но так и не нашол ответа, обычно пургу отвечают. :) Универсального ответа так и не нашол...

Вопрос: как в шелле узнать какой шелл???

Ответ1
echo $SHELL не катит т.к. он показывает переменную окружения, а не шелл в котором я счас. Например после логина запуская у меня на сервере разные шелы и сомтря занчение переменной - видим одно и тоже... шелл который по умолчанию для меня.

Ответ2
echo $0 тоже не катит, так как он показывает не шел в котором я а "оболочку" притом без пути. Попробуйте залогиниться под юзером набрать это, а потом набрать этоже после команды su :) оно и выдаст -su а не текущий шелл.

Так что, кто-то знает как заставить шелл признаться - какой у него исполняемый файл(полный путь и имя файла) и неплохо бы ешо его и версию


Содержание

Сообщения в этом обсуждении
"Как спросить у шела - кто ты?"
Отправлено Oyyo , 20-Дек-08 21:48 
>[оверквотинг удален]
>
>Ответ2
>echo $0 тоже не катит, так как он показывает не шел в
>котором я а "оболочку" притом без пути. Попробуйте залогиниться под юзером
>набрать это, а потом набрать этоже после команды su :) оно
>и выдаст -su а не текущий шелл.
>
>Так что, кто-то знает как заставить шелл признаться - какой у него
>исполняемый файл(полный путь и имя файла) и неплохо бы ешо его
>и версию

сморти /etc/passwd на юзера, а для версии сотри ман на предмет флага -v or --version



"Как спросить у шела - кто ты?"
Отправлено Kurk_SS , 21-Дек-08 01:59 
>
>сморти /etc/passwd на юзера, а для версии сотри ман на предмет флага

и чем это отличаеться от просмотра переменной ШЕЛЛ??? (с идейной точки зрения, понятно шо в переменную можно чипуху записать, но мы это не расматриваем)
я про то что, кто сказал что пользователь потом не перезапускал шелл, уже юзая какойто другой,я ж писал шо вариант сразу накрываеться попой, если запустить из своего шела другой шелл

>-v or --version

нету, да и вопрос есть ли в шеле команда, шоб узнать... типа как uname -v только про шелл


"Как спросить у шела - кто ты?"
Отправлено s_dog , 20-Дек-08 22:15 
PID шела - echo $$

"Как спросить у шела - кто ты?"
Отправлено Kurk_SS , 21-Дек-08 02:01 
>PID шела - echo $$

РЕСПЕКТ!!! вот то шо надо вкратце и  по существу....
то шо надо, всмысле по теме, но немного не то...

вот я сделал
логинюсь
запускаю sh
потом bash
потом su
ввожу echo $$
и что ты думаешь оно сообщило ? _su(csh) это его ответ... это
получаеться если скрипту нужно узнать какой шелл, то бегать по выводу команды ps -Al
и думать , шоб найти какойже шелл работает.

ЗЫ:
в базовые скрипты отправляющая станция вставляет вставки, которым во время работы нужно узнать какой шелл нынче, а в каком шелле будет выходной скрипт выполняться определиться лишь на принимающей станции... типа авто-админа пытаемся сделать.... который будет слать скрипты станциям шоб те их выполнили, притом исходя из того шо легче сделать нужные действия далеко не в стандартном шеле, а есть там нестандартный или нету, и какой есть, опеределиться только на конечной станции


"Как спросить у шела - кто ты?"
Отправлено Anatoliy , 21-Дек-08 03:05 
#!/usr/local/bin/bash

q=`basename $0`
w=`head -n 1 ${q} | sed 's/.*\///'`  

echo "${w}"


Вас это интересовало?


"Как спросить у шела - кто ты?"
Отправлено Kurk_SS , 21-Дек-08 11:54 
>#!/usr/local/bin/bash
>
>q=`basename $0`
>w=`head -n 1 ${q} | sed 's/.*\///'`
>
>echo "${w}"
>
>
>Вас это интересовало?

так это же тоже самое что и echo $0 - если это выполнить после команды su ... оно вместо шелла выдаёт саму su. вот после sudo всёравно выдаёт шелл притом с полным путём - и тогда ваш скрипт полность оправдывает надежды. а вот после su нет
да и после логина набор этих команд не даст эфекта... так как в переменной 0 записано не "sh" a "-sh" basename вообще тогда материться.
мне бы именно универсальный метод, пусть и через попу, если у шела нет встроеных команд-позывных :) но который сработает в любом случае....



"Как спросить у шела - кто ты?"
Отправлено Sarge , 21-Дек-08 12:52 
>ввожу echo $$
>и что ты думаешь оно сообщило ? _su(csh) это его ответ... это
>
>получаеться если скрипту нужно узнать какой шелл, то бегать по выводу команды
>ps -Al
>и думать , шоб найти какойже шелл работает.

а у меня echo $$ всегда выдаёт PID текущего шелла (пробовал bash, sh, dash) - даже после su... Это у вас csh или su видимо глючит.

Вообще, у скриптов в первой строке написано чем их запускать, так что узнавать это ещё и внутри скрипта обычно не нужно.


"Как спросить у шела - кто ты?"
Отправлено Kurk_SS , 21-Дек-08 14:48 
>[оверквотинг удален]
>>получаеться если скрипту нужно узнать какой шелл, то бегать по выводу команды
>>ps -Al
>>и думать , шоб найти какойже шелл работает.
>
>а у меня echo $$ всегда выдаёт PID текущего шелла (пробовал bash,
>sh, dash) - даже после su... Это у вас csh или
>su видимо глючит.
>
>Вообще, у скриптов в первой строке написано чем их запускать, так что
>узнавать это ещё и внутри скрипта обычно не нужно.

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


"Как спросить у шела - кто ты?"
Отправлено Hetzer , 21-Дек-08 19:59 
>[оверквотинг удален]
>
>Ответ2
>echo $0 тоже не катит, так как он показывает не шел в
>котором я а "оболочку" притом без пути. Попробуйте залогиниться под юзером
>набрать это, а потом набрать этоже после команды su :) оно
>и выдаст -su а не текущий шелл.
>
>Так что, кто-то знает как заставить шелл признаться - какой у него
>исполняемый файл(полный путь и имя файла) и неплохо бы ешо его
>и версию

head -n 1 /proc/`echo $$`/status


"Как спросить у шела - кто ты?"
Отправлено Kurk_SS , 21-Дек-08 21:49 

>head -n 1 /proc/`echo $$`/status

до первого слеша я так понимаю = вывести шабку файла в количестве одна строка а потом имя файла должно ити или текст.... вот то что там ему не нравиться... пишет
/proc/<PID>/status нет такого файла


"Как спросить у шела - кто ты?"
Отправлено Hetzer , 21-Дек-08 22:27 

озвучьте ТЗ полностью

"Как спросить у шела - кто ты?"
Отправлено Hetzer , 21-Дек-08 22:33 
>>
>>>head -n 1 /proc/`echo $$`/status

это для линуксов


"Как спросить у шела - кто ты?"
Отправлено universite , 22-Дек-08 02:27 
>В сети много видел вопросов из серии как узнать какой shell сейчас
>запущен, но так и не нашол ответа, обычно пургу отвечают. :)
>Универсального ответа так и не нашол...
>
>Вопрос: как в шелле узнать какой шелл???

ps auxw | grep `echo $$` | grep -v grep |awk '{print $11;}'


"Как спросить у шела - кто ты?"
Отправлено Andrey Mitrofanov , 22-Дек-08 09:36 
>ps auxw | grep `echo $$` | grep -v grep |awk '{print
>$11;}'

ps |awk '$1=="'$$'"{print $4;exit}'


"Как спросить у шела - кто ты?"
Отправлено Kurk_SS , 22-Дек-08 10:34 
спасибо за ответы, но я так понял что мы пошли по пути получения чистого имени шела из вывода ps зная ПИД шела по переменной $$. Всё это понятно, яб и сам сделал, еслиб небыло ситуаций когда $$ хранит не пид шела а например команды su У меня кстате FreeBSD

я так понимаю в интерпритаторах нет встроенной команды для вывода информации про сам интерпритатор. :(


"в общем-то оно никому не нужно"
Отправлено Andrey Mitrofanov , 22-Дек-08 11:20 
>я так понимаю в интерпритаторах нет встроенной команды для вывода информации про
>сам интерпритатор. :(

"Переносимого" (для любого ос-а и любого sh), видимо, нет. "Их" просто много, и "минимальное" подмножество (оно же - переносимый шелл, юних шелл, посикс шелл) очень куцее.

Соответственно, либо пишешь "переносимо" и отплясываешь вокруг всех ограничений всех возможных шеллов, либо, если есть возможность, выбираешь 1 из возможных шелов и пишешь на нём, "несовместимо".


"Как спросить у шела - кто ты?"
Отправлено angra , 22-Дек-08 21:44 
Не совсем так. Ее нет у sh, который условно можно считать всегда имеющимся в наличии минимумом. В других шеллах такие средства есть, но различаются и на этом отличии и можно сыграть, например для баша будет непустой $BASH, для tcsh скорее всего $SHLVL итд. Поищите уникальные особенности в манах по нужным вам шеллам.
А можно узнать для чего вообще такой изврат нужен? Ведь даже если вы пытаетесь выполнить команды через ssh на машине с неизвестным шеллом, то можно либо ограничится sh, либо передать файл с нужным скриптом через scp. Для последнегоо скорее важно наличие(/etc/shells) нужных шеллов(а еще лучше перла), а не выяснение текущего шелла.