<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF168%3A%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%C2%AD%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%BE%C2%AD%D0%BA%D0%B0._Pdmenu</id>
		<title>LXF168:Команд­ная стро­ка. Pdmenu - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF168%3A%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%C2%AD%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%BE%C2%AD%D0%BA%D0%B0._Pdmenu"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF168:%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%C2%AD%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%BE%C2%AD%D0%BA%D0%B0._Pdmenu&amp;action=history"/>
		<updated>2026-05-14T02:48:06Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF168:%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%C2%AD%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%BE%C2%AD%D0%BA%D0%B0._Pdmenu&amp;diff=19446&amp;oldid=prev</id>
		<title>Olkol: /* Про­стой спо­соб за­пус­кать ко­ман­ды в тер­ми­на­ле */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF168:%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%C2%AD%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%BE%C2%AD%D0%BA%D0%B0._Pdmenu&amp;diff=19446&amp;oldid=prev"/>
				<updated>2018-11-10T17:27:33Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Про­стой спо­соб за­пус­кать ко­ман­ды в тер­ми­на­ле&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 17:27, 10 ноября 2018&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 12:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 12:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;И еще один ва­ри­ант – дать поль­зо­ва­те­лю способ за­пустить несколь­ко команд, не по­гру­жая его во все воз­мож­но­сти обо­лоч­ки. Все эти про­бле­мы мож­но ре­шить с pdmenu (http://joeyh.name/code/pdmenu), причем вам даже не при­дет­ся ниче­го про­грам­ми­ро­вать.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;И еще один ва­ри­ант – дать поль­зо­ва­те­лю способ за­пустить несколь­ко команд, не по­гру­жая его во все воз­мож­но­сти обо­лоч­ки. Все эти про­бле­мы мож­но ре­шить с pdmenu (http://joeyh.name/code/pdmenu), причем вам даже не при­дет­ся ниче­го про­грам­ми­ро­вать.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Про­стой при­мер&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;====&lt;/ins&gt;Про­стой при­мер&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;====&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;У pdmenu один файл на­строй­ки. По умол­чанию, ес­ли он не за­дан, про­грам­ма бу­дет ис­кать его в ~/.pdmenurc, а ес­ли там его нет – в /etc/pdmenurc. Что­бы за­дать дру­гой файл, ука­жи­те его при за­пуске pdmenu как ар­гу­мент:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;У pdmenu один файл на­строй­ки. По умол­чанию, ес­ли он не за­дан, про­грам­ма бу­дет ис­кать его в ~/.pdmenurc, а ес­ли там его нет – в /etc/pdmenurc. Что­бы за­дать дру­гой файл, ука­жи­те его при за­пуске pdmenu как ар­гу­мент:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 46:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 46:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;pdmenu -c pdmenurc&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;pdmenu -c pdmenurc&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;До­бав­ля­ем уров­ни&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;===&lt;/ins&gt;До­бав­ля­ем уров­ни&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Одним ме­ню, вы­пол­няю­щим от­дель­ные ко­ман­ды, воз­мож­но­сти pdmenu не ог­раничи­ва­ют­ся – так­же под­дер­жи­ва­ет­ся несколь­ко ме­ню или под­ме­ню. В пер­вом при­ме­ре у нас бы­ло од­но вы­ра­жение для ме­ню с именем main. Имя на са­мом де­ле мо­жет быть лю­бым – при за­пуске pdmenu за­гру­жа­ет пер­вое ме­ню в фай­ле (это мож­но по­да­вить, ука­зав па­ра­метр при за­пуске, но по­ка мы не бу­дем это­го ка­сать­ся). По­про­буй­те до­ба­вить вто­рое ме­ню сле­дую­щим об­ра­зом:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Одним ме­ню, вы­пол­няю­щим от­дель­ные ко­ман­ды, воз­мож­но­сти pdmenu не ог­раничи­ва­ют­ся – так­же под­дер­жи­ва­ет­ся несколь­ко ме­ню или под­ме­ню. В пер­вом при­ме­ре у нас бы­ло од­но вы­ра­жение для ме­ню с именем main. Имя на са­мом де­ле мо­жет быть лю­бым – при за­пуске pdmenu за­гру­жа­ет пер­вое ме­ню в фай­ле (это мож­но по­да­вить, ука­зав па­ра­метр при за­пуске, но по­ка мы не бу­дем это­го ка­сать­ся). По­про­буй­те до­ба­вить вто­рое ме­ню сле­дую­щим об­ра­зом:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 70:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 70:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Флаг edit ве­лит pdmenu из­менить ко­ман­ду пе­ред за­пуском; из­ме­няе­мая часть за­да­ет­ся в фор­ма­те ~title:default~, где title – за­го­ло­вок ото­бра­жае­мо­го ок­на, а default – зна­чение по умол­чанию (да-да!), ко­то­рое поль­зо­ва­тель мо­жет из­менить до на­жа­тия Enter. Зна­чение по умол­чанию мож­но оста­вить пустым. Фла­гов мо­жет быть несколь­ко – на­при­мер, edit,display.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Флаг edit ве­лит pdmenu из­менить ко­ман­ду пе­ред за­пуском; из­ме­няе­мая часть за­да­ет­ся в фор­ма­те ~title:default~, где title – за­го­ло­вок ото­бра­жае­мо­го ок­на, а default – зна­чение по умол­чанию (да-да!), ко­то­рое поль­зо­ва­тель мо­жет из­менить до на­жа­тия Enter. Зна­чение по умол­чанию мож­но оста­вить пустым. Фла­гов мо­жет быть несколь­ко – на­при­мер, edit,display.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Ко­ман­ды по­сложнее&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;===&lt;/ins&gt;Ко­ман­ды по­сложнее&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;pdmenu так­же мо­жет вы­пол­нять несколь­ко команд в од­ном пунк­те ме­ню, на­при­мер, так:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;pdmenu так­же мо­жет вы­пол­нять несколь­ко команд в од­ном пунк­те ме­ню, на­при­мер, так:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF168:%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%C2%AD%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%BE%C2%AD%D0%BA%D0%B0._Pdmenu&amp;diff=19445&amp;oldid=prev</id>
		<title>Olkol: Новая страница: «Категория: Учебники '''pdmenu: Ме­ню обо­лоч­ки''' == Про­стой спо­соб за­пус­кать ко­ман­д…»</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF168:%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%C2%AD%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%BE%C2%AD%D0%BA%D0%B0._Pdmenu&amp;diff=19445&amp;oldid=prev"/>
				<updated>2018-11-10T17:25:28Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «&lt;a href=&quot;/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%D0%B8&quot; title=&quot;Категория:Учебники&quot;&gt;Категория: Учебники&lt;/a&gt; &amp;#039;&amp;#039;&amp;#039;pdmenu: Ме­ню обо­лоч­ки&amp;#039;&amp;#039;&amp;#039; == Про­стой спо­соб за­пус­кать ко­ман­д…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Категория: Учебники]]&lt;br /&gt;
'''pdmenu: Ме­ню обо­лоч­ки'''&lt;br /&gt;
== Про­стой спо­соб за­пус­кать ко­ман­ды в тер­ми­на­ле ==&lt;br /&gt;
&lt;br /&gt;
''Нейл Бот­вик рас­ска­зы­ва­ет о про­стой сис­те­ме, с по­мо­щью ко­то­рой мож­но соз­да­вать про­стые ме­ню, что­бы не за­по­ми­нать слож­ные ко­ман­ды.''&lt;br /&gt;
[[Файл:LXF158.tut security.ex..png  |left |100px |thumb|'''Наш эксперт'''. У Ней­ла Бот­ви­ка по ком­пь­ю­те­ру в ка­ж­дой ком­на­те, но по со­об­ра­же­ни­ям безо­пас­но­сти он ни за что не ска­жет вам, где на­хо­дит­ся цен­траль­ный сер­вер.&lt;br /&gt;
]] &lt;br /&gt;
Тер­ми­нал – од­но из глав­ных досто­инств Linux, но неопыт­ным поль­зо­ва­те­лям он мо­жет ка­зать­ся пу­гаю­щим, незна­ко­мым и слег­ка недру­же­люб­ным. Как-то я ра­бо­тал в сво­ем лю­би­мом тер­ми­на­ле Konsole, и один из мо­их до­машних спро­сил: «А от­ку­да ты зна­ешь, ка­кие кноп­ки на­жи­мать?» И это ожи­дае­мая ре­ак­ция от людей, при­выкших ра­бо­тать с кноп­ка­ми и ме­ню с всплы­ваю­щи­ми под­сказ­ка­ми. Пускай гра­фи­че­­ский ин­тер­фейс остав­ля­ет нам мень­ше вы­бо­ра, но за­то яс­ны ва­ри­ан­ты, из ко­то­рых вы­би­рать. Что же де­лать, когда но­вич­ку нуж­но вы­полнить несколь­ко команд в тер­ми­на­ле – по­то­му, что эти дей­ст­вия нель­зя сде­лать че­рез гра­фи­че­­ский ин­тер­фейс, или при ра­бо­те с ком­пь­ю­те­ром че­рез SSH (а то и при под­клю­чаении с ком­пь­ю­те­ра с Windows с по­мо­щью PuTTY)?&lt;br /&gt;
&lt;br /&gt;
Один из ва­ри­ан­тов – на­пи­сать скрипт с по­мо­щью гра­фи­че­­ских про­грамм для соз­дания скрип­тов, вро­де Zenity или Kommander, но для это­го нуж­на под­хо­дя­щая ра­бо­чая сре­да или, по мень­шей ме­ре, долж­ны быть уста­нов­ле­ны нуж­ные ути­ли­ты. Так­же есть про­грам­мы ти­па dialog, с по­мо­щью ко­то­рых в тер­ми­на­ле мож­но соз­да­вать диа­ло­го­вые ок­на ncurses; они то­же эф­фек­тив­но ра­бо­та­ют по SSH, да­же из дру­гой ОС.&lt;br /&gt;
&lt;br /&gt;
И еще один ва­ри­ант – дать поль­зо­ва­те­лю способ за­пустить несколь­ко команд, не по­гру­жая его во все воз­мож­но­сти обо­лоч­ки. Все эти про­бле­мы мож­но ре­шить с pdmenu (http://joeyh.name/code/pdmenu), причем вам даже не при­дет­ся ниче­го про­грам­ми­ро­вать.&lt;br /&gt;
&lt;br /&gt;
Про­стой при­мер&lt;br /&gt;
&lt;br /&gt;
У pdmenu один файл на­строй­ки. По умол­чанию, ес­ли он не за­дан, про­грам­ма бу­дет ис­кать его в ~/.pdmenurc, а ес­ли там его нет – в /etc/pdmenurc. Что­бы за­дать дру­гой файл, ука­жи­те его при за­пуске pdmenu как ар­гу­мент:&lt;br /&gt;
&lt;br /&gt;
pdmenu /path/to/config.file&lt;br /&gt;
&lt;br /&gt;
Это про­стой тек­сто­вый файл, сле­дую­щий стан­дарт­ным со­гла­шениям. Ком­мен­та­рии по­ме­ча­ют­ся #; для луч­шей чи­тае­мо­сти мож­но при­ме­нять от­сту­пы, но про­грам­ма их иг­но­ри­ру­ет. Вот про­стой при­мер, ко­то­рый по­зво­ля­ет мон­ти­ро­вать, вы­во­дить спи­сок со­дер­жи­мо­го, про­иг­ры­вать и вы­каты­вать DVD-диск:&lt;br /&gt;
&lt;br /&gt;
color:desktop:blue:blue&lt;br /&gt;
&lt;br /&gt;
color:title:blue:white&lt;br /&gt;
&lt;br /&gt;
color:base:blue:white&lt;br /&gt;
&lt;br /&gt;
menu:main:Main Menu:This is the main menu&lt;br /&gt;
&lt;br /&gt;
exec:Mount DVD::pmount /dev/dvd&lt;br /&gt;
&lt;br /&gt;
exec:List DVD:display:lsdvd&lt;br /&gt;
&lt;br /&gt;
exec:Play DVD::vlc dvd://&lt;br /&gt;
&lt;br /&gt;
exec:Eject DVD::eject /dev/dvd&lt;br /&gt;
&lt;br /&gt;
exit:Exit&lt;br /&gt;
&lt;br /&gt;
Пер­вые три стро­ки – чис­тая косме­ти­ка, в них за­да­ет­ся цве­то­вая схе­ма; за­тем мы оп­ре­де­ля­ем од­но ме­ню. Стро­ка, оп­ре­де­ляю­щая ме­ню, со­сто­ит из трех эле­мен­тов: на­звания ме­ню, за­го­лов­ка над ме­ню и (необя­за­тель­но) под­сказ­ки, ко­то­рая ото­бра­жа­ет­ся в нижней час­ти ок­на. За­тем оп­ре­де­ля­ют­ся пунк­ты ме­ню. От­сту­пы иг­но­ри­ру­ют­ся, но уп­ро­ща­ют чи­тае­мость пунк­тов ме­ню в тек­сте. Ко­ман­да exec за­пуска­ет про­грам­му; у нее есть три па­ра­мет­ра, опять же раз­де­лен­ных двое­то­чия­ми. Пер­вый – на­звание пунк­та ме­ню, вто­рой – на­бор фла­гов, влияю­щих на за­пуск коман­ды, а тре­тий – са­ма ко­ман­да. Ес­ли фла­гов не ука­за­но, pdmenu за­пуска­ет про­грам­му и воз­вра­ща­ет­ся в ме­ню. Вы­вод ко­ман­ды на тер­ми­нал не ото­бра­жа­ет­ся, и вы уви­ди­те его толь­ко по­сле вы­хо­да из pdmenu. Ес­ли нуж­но ви­деть этот вы­вод, как во вто­ром пунк­те ме­ню, где мы по­лу­ча­ем спи­сок фай­лов DVD ко­ман­дой lsdvd, до­бавь­те флаг display. Так­же мож­но до­ба­вить го­ря­чие кла­ви­ши для пунк­тов ме­ню, по­мес­тив сим­вол под­чер­ки­вания пе­ред бук­вой, ко­то­рая на­ме­че­на в ка­че­­ст­ве го­ря­чей кла­ви­ши, на­при­мер:&lt;br /&gt;
&lt;br /&gt;
exec:_Play DVD::vlc dvd://&lt;br /&gt;
&lt;br /&gt;
При на­жа­тии го­ря­чей кла­ви­ши пункт ме­ню не за­пуска­ет­ся, а толь­ко вы­де­ля­ет­ся. Ес­ли од­на го­ря­чая кла­ви­ша со­от­вет­ст­ву­ет несколь­ким пунк­там ме­ню, вы­де­ление бу­дет пе­ре­хо­дить с од­но­го на дру­гой. Вы­де­ление цве­том ра­бо­тать не бу­дет. Это про­ис­хо­дит по­то­му, что по умол­чанию pdmenu ото­бра­жа­ет ме­ню в стан­дарт­ных цве­тах тер­ми­на­ла – что­бы уви­деть все цве­та, нуж­но до­ба­вить па­ра­метр -c или --color. Дру­гой спо­соб это сде­лать – за­дать пере­мен­ную ок­ру­жения COLORTERM; при этом зна­чение не иг­ра­ет ро­ли, ес­ли пе­ре­мен­ная за­да­на.&lt;br /&gt;
&lt;br /&gt;
pdmenu -c pdmenurc&lt;br /&gt;
&lt;br /&gt;
До­бав­ля­ем уров­ни&lt;br /&gt;
&lt;br /&gt;
Одним ме­ню, вы­пол­няю­щим от­дель­ные ко­ман­ды, воз­мож­но­сти pdmenu не ог­раничи­ва­ют­ся – так­же под­дер­жи­ва­ет­ся несколь­ко ме­ню или под­ме­ню. В пер­вом при­ме­ре у нас бы­ло од­но вы­ра­жение для ме­ню с именем main. Имя на са­мом де­ле мо­жет быть лю­бым – при за­пуске pdmenu за­гру­жа­ет пер­вое ме­ню в фай­ле (это мож­но по­да­вить, ука­зав па­ра­метр при за­пуске, но по­ка мы не бу­дем это­го ка­сать­ся). По­про­буй­те до­ба­вить вто­рое ме­ню сле­дую­щим об­ра­зом:&lt;br /&gt;
&lt;br /&gt;
menu:newsubmenu:Some more stuff:This is the first submenu&lt;br /&gt;
&lt;br /&gt;
exec:Some Command::/usr/bin/somecommand&lt;br /&gt;
&lt;br /&gt;
nop:This does nothing&lt;br /&gt;
&lt;br /&gt;
exit:Main Menu&lt;br /&gt;
&lt;br /&gt;
Так мы оп­ре­де­ля­ем но­вое ме­ню – вы­ра­жение nop ниче­го не де­ла­ет. С его по­мо­щью мож­но до­ба­вить стро­ку с опи­санием или пустую стро­ку, ес­ли по­сле вы­ра­жения нет тек­ста. В пер­вом ме­ню мы восполь­зо­ва­лись exit для вы­хо­да из pdmenu. В под­ме­ню exit ве­дет се­бя ина­че – она вы­хо­дит из дан­но­го под­ме­ню, воз­вра­ща­ясь в то ме­ню, ко­то­рое вы­зва­ло под­ме­ню. До­ба­вим в ме­ню стро­ку для пе­ре­хо­да в под­ме­ню:&lt;br /&gt;
&lt;br /&gt;
show:Go to submenu::newsubmenu&lt;br /&gt;
&lt;br /&gt;
Ее на­бор па­ра­мет­ров по­хож на па­ра­мет­ры exec: тек­сто­вая надпись, несколь­ко фла­гов и имя под­ме­ню, в ко­то­рое нуж­но пе­рей­ти. У ко­ман­ды show нет флаж­ков, по­это­му оставь­те это по­ле пустым. Не­боль­шое пре­ду­пре­ж­дение: ес­ли два ме­ню вы­зы­ва­ют друг дру­га, pdmenu про­мол­чит, но поль­зо­ва­тель ока­жет­ся в пет­ле: exit бу­дет по­сто­ян­но воз­вра­щать его в дру­гое ме­ню вме­сто глав­но­го ме­ню. Из­бе­гай­те та­ких ре­кур­сив­ных схем.&lt;br /&gt;
&lt;br /&gt;
Мы уже рас­смат­ри­ва­ли флаг display с ко­ман­дой exec – он по­ка­зы­ва­ет в окне вы­вод ко­ман­ды. Без него вы­вод ­пиш­ет­ся в ок­но тер­ми­на­ла, но сра­зу же за­тап­ты­ва­ет­ся при пе­ре­ри­сов­ке ме­ню. Дру­гой спо­соб со­хранить вы­вод ко­ман­ды – восполь­зо­вать­ся фла­гом pause, ко­то­рый пе­ре­клю­ча­ет поль­зо­ва­те­ля в ок­но тер­ми­на­ла/кон­со­ли, что­бы по­ка­зать вы­вод ко­ман­ды, и по­сле на­жа­тия кла­ви­ши воз­вра­ща­ет его об­рат­но в ме­ню. Еще один по­лез­ный флаг – edit, он по­зво­ля­ет поль­зо­ва­те­лю под ва­шим кон­тро­лем из­ме­нять ар­гу­мен­ты ко­ман­ды. Про­ще все­го по­яснить это на при­ме­ре:&lt;br /&gt;
&lt;br /&gt;
exec:Play another DVD:edit:/usr/bin/vlc ~Which drive?:/dev/sr0~&lt;br /&gt;
&lt;br /&gt;
Флаг edit ве­лит pdmenu из­менить ко­ман­ду пе­ред за­пуском; из­ме­няе­мая часть за­да­ет­ся в фор­ма­те ~title:default~, где title – за­го­ло­вок ото­бра­жае­мо­го ок­на, а default – зна­чение по умол­чанию (да-да!), ко­то­рое поль­зо­ва­тель мо­жет из­менить до на­жа­тия Enter. Зна­чение по умол­чанию мож­но оста­вить пустым. Фла­гов мо­жет быть несколь­ко – на­при­мер, edit,display.&lt;br /&gt;
&lt;br /&gt;
Ко­ман­ды по­сложнее&lt;br /&gt;
&lt;br /&gt;
pdmenu так­же мо­жет вы­пол­нять несколь­ко команд в од­ном пунк­те ме­ню, на­при­мер, так:&lt;br /&gt;
&lt;br /&gt;
group:Execute several commands&lt;br /&gt;
&lt;br /&gt;
exec:::command1&lt;br /&gt;
&lt;br /&gt;
exec:::command2&lt;br /&gt;
&lt;br /&gt;
exec:::command3&lt;br /&gt;
&lt;br /&gt;
endgroup&lt;br /&gt;
&lt;br /&gt;
Под­лин­ное хит­ро­умие – ис­поль­зо­вать exec с параметром makemenu, ко­то­рый стро­ит ме­ню на ле­ту. Он вы­пол­ня­ет за­дан­ную ко­ман­ду поч­ти так же, как обыч­но де­ла­ет exec, но ис­поль­зует ре­зуль­тат ее вы­полнения как оп­ре­де­ление ме­ню. На­при­мер, по­стро­ить ме­ню для по­ка­за фо­то­гра­фий из ка­та­ло­га мож­но та­ким ко­дом:&lt;br /&gt;
&lt;br /&gt;
group:Show Pics&lt;br /&gt;
&lt;br /&gt;
exec:makemenu: \&lt;br /&gt;
&lt;br /&gt;
echo “menu:pics:Pick a pic”; \&lt;br /&gt;
&lt;br /&gt;
for f in $(ls -1 photos); do \&lt;br /&gt;
&lt;br /&gt;
echo “exec:$f::display photos/$f”; \&lt;br /&gt;
&lt;br /&gt;
done; \&lt;br /&gt;
&lt;br /&gt;
echo exit:Go Back&lt;br /&gt;
&lt;br /&gt;
show:::pics&lt;br /&gt;
&lt;br /&gt;
remove:::pics&lt;br /&gt;
&lt;br /&gt;
endgroup&lt;br /&gt;
&lt;br /&gt;
Вы­пол­ня­ет­ся все, что сле­ду­ет за makemenu; обыч­но это на­бор команд echo, пи­шу­щих ме­ню. Об­рат­ные слэ­ши нуж­ны по­то­му, что pdmenu счи­та­ет все ко­ман­ды од­но­строч­ны­ми, а та­кие пло­хо чи­та­ют­ся. Все про­чее – стан­дарт­ный скрипт обо­лоч­ки. Он за­пи­сы­ва­ет вы­ра­жение menu, за­тем про­хо­дит по спи­ску фай­лов, вы­пол­няя ко­ман­ды exec, и за­кан­чи­ва­ет ко­ман­дой exit. Все это объ­е­ди­ня­ет­ся в груп­пу, ко­то­рая стро­ит ме­ню фла­гом exec:makemenu, ото­бра­жа­ет его фла­гом show и уда­ля­ет оп­ре­де­ление menu. Ко­ман­ды вы­пол­ня­ют­ся по­сле­до­ва­тель­но, по­это­му уда­ление про­изой­дет не рань­ше, чем поль­зо­ва­тель вый­дет из ме­ню с фо­то­гра­фия­ми.&lt;br /&gt;
&lt;br /&gt;
Вы мо­же­те спро­сить: «А за­чем нуж­на сис­те­ма ме­ню, цель ко­то­рой – обой­тись без вво­да команд, но для ее за­пуска при­хо­дит­ся ко­ман­ды-то и вво­дить?» По­ка мы за­пуска­ли pdmenu из обо­лоч­ки, но ее мож­но за­пустить вме­сто обо­лоч­ки. Для это­го нуж­но из­менить обо­лоч­ку поль­зо­ва­те­ля по умол­чанию; по­это­му ли­бо соз­дай­те но­во­го поль­зо­ва­те­ля для про­вер­ки, ли­бо до­бавь­те в од­но из ме­ню воз­мож­ность за­пуска стан­дарт­ной обо­лоч­ки – нам ну­жен за­пас­ной вы­ход, ес­ли что-то пой­дет не так. Этот пункт ме­ню пе­ре­ве­дет вас в обо­лоч­ку, даст поль­зо­ва­те­лю вы­полнить все необ­хо­ди­мые ко­ман­ды и вер­нуть­ся в ме­ню по­сле за­вер­шения ра­бо­ты обо­лоч­ки кла­ви­ша­ми Ctrl+D или пу­тем вы­хо­да из сис­те­мы.&lt;br /&gt;
&lt;br /&gt;
Ес­ли за­пустить vipw от имени root для из­менения фай­ла па­ро­лей, по­следний па­ра­метр в стро­ке с ка­ж­дым поль­зо­ва­те­лем – это обо­лоч­ка, за­пускае­мая при вхо­де поль­зо­ва­те­ля в сис­те­му, обыч­но /bin/bash. Смените ее на /usr/bin/pdmenu. Так­же нуж­но до­ба­вить /usr/bin/pdmenu в спи­сок доступ­ных обо­ло­чек в /etc/shells, ес­ли менед­жер па­ке­тов это­го не сде­лал. Те­перь при вхо­де в сис­те­му поль­зо­ва­тель сра­зу по­па­дет в ме­ню, а при вы­хо­де из глав­ного ме­ню он вый­дет из сис­те­мы. Это ра­бо­та­ет как для вхо­да в сис­те­му на локаль­ном ком­пь­ю­те­ре, так и че­рез SSH. Не обя­за­тель­но да­же поль­зо­вать­ся Linux: PuTTY в Windows – при­лич­ный SSH-кли­ент, ко­то­рый пре­крас­но ла­дит с pdmenu. |&lt;/div&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	</feed>