Переменная как команда; оценка по сравнению с ударом-c

Потрясающий является довольно потрясающим, wmfs2/ratpoison - также. Однако необходимо смочь,

modkey = "Control" -- Under the require keys

modkey используется в конфигурациях по умолчанию поэтому, если бы Вы не отклонились слишком далекие от значений по умолчанию, то это должно работать как очарование.

Для трех Ключей, Отображающих Вас, мог также иметь следующее,

awful.key({ modkey, "q"   }, "j", function () awful.client.swap.byidx(  1)    end),

Таким образом в {} ключи Ваш, скрепил бы, и "j" является ключом, используемым для инициирования действия соответственно.

В Вашем случае я установил бы modkey1 = "q", затем заменил вышеупомянутый пример {modkey, modkey1}

Удача с RatPoison :)

Kyle

41
14.04.2014, 01:05
3 ответа
[113760] Самое главное различие между [12185]и [12186] заключается в том, что первая запускается в подоболочке, а вторая нет. Итак:[12187]OUTPUT:[12188]OUTPUT:[12189]Понятия не имею, зачем кому-то использовать исполняемый файл [114254]bash[114255] таким образом. Если вам нужно вызвать его, используйте POSIX гарантированно встроенный [114256]sh[114257]. Или [114258](subhell eval)[114259], если вы хотите защитить свою среду.[12190]Лично я предпочитаю оболочку [114260].dot[114261], прежде всего.[12191]OUTPUT[12192]BUT YOU NEED IT AT ALL? [12193]Единственная причина использовать либо то, что ваша переменная действительно назначает или оценивает другую, либо разделение слова важно для вывода.[12194]Например:[12195]OUTPUT:[12196]Это работает, но только потому, что [114262]echo[114263] не заботится о количестве аргументов.[12197]OUTPUT:[12198]Видите? Двойные кавычки возникают потому, что результат разложения оболочки [114264]$var[114265] не вычисляется для [114266]quote-removal[114267]. [12199]OUTPUT:[12200] Но с помощью [114268]eval[114269] или [114270]sh[114271]:[12201]OUTPUT:[12202] Когда мы используем [114272]eval[114273] или [114274]sh[114275] оболочка берет второй проход по результатам разворотов и оценивает их также как потенциальную команду, поэтому котировки имеют значение. Вы также можете сделать:[12203]OUTPUT[12204]
23
27.01.2020, 19:35
[113740] Я сделал быстрый тест:[12173](Да, я знаю, я использовал bash -c для выполнения цикла, но это не должно иметь значения). [12174]Результаты:[12175]Так что [114204]eval[114205] работает быстрее. Из man-страницы [114206]eval[114207]: [12176]Утилита eval должна построить команду, объединив аргументы вместе, отделив каждый из них символом. Построенная команда должна быть прочитана и выполнена оболочкой.[12177]bash -c[114211], конечно же, выполняет команду в оболочке bash. Замечание: Я использовал [114212]/bin/echo[114213], потому что [114214]echo[114215] - это оболочка, встроенная в [114216]bash[114217], что означает, что новый процесс не должен быть запущен. Замена [114218]/дюйма/эхо[114219] на [114220]echo[114221] для теста [114222]bash -c[114223] заняла [114224]1.28s[114225]. Это примерно то же самое. Ховевер, [114226]eval[114227] быстрее работает с исполняемыми файлами. Основное отличие заключается в том, что [114228]eval[114229] не запускает новую оболочку (выполняет команду в текущей), в то время как [114230]bash -c[114231] запускает новую оболочку, а затем выполняет команду в новой оболочке. Запуск новой оболочки занимает время, поэтому [114232]bash -c[114233] работает медленнее, чем [114234]eval[114235].[113751].
5
27.01.2020, 19:35
[12178]eval "$1" [114237] выполняет команду в текущем сценарии. Она может устанавливать и использовать переменные оболочки из текущего сценария, устанавливать переменные окружения для текущего сценария, устанавливать и использовать функции из текущего сценария, устанавливать текущий каталог, маску, ограничения и другие атрибуты для текущего сценария и так далее. [114238]bash -c "$1"[114239] выполняет команду в совершенно отдельном скрипте, который наследует переменные окружения, файловые дескрипторы и другое процессное окружение (но не передает обратно никаких изменений), но не наследует внутренние настройки оболочки (переменные оболочки, функции, опции, ловушки и т.д.). [12179] Есть другой способ, [114240](eval "$1")[114241], который выполняет команду в подоболочке: он наследует все от вызывающего скрипта, но не передает никаких изменений обратно. [12180]Например, предполагая, что переменная [114242]dir[114243] не экспортируется и [114244]$1[114245] является [114246]cd "$foo"; ls[114247], то:[12181]cd /starting/directory; foo=/somewhere/else; eval "$1"; pwd[114470] перечисляет содержимое [114471]/somewhere/else[114472] и печатает [114473]/somewhere/else[114474]. [12182]cd /starting/directory; foo=/somewhere/else; (eval "$1"); pwd[114476] перечисляет содержимое [114477]/somewhere/else[114478] и печатает [114479]/starting/else[114480]. [12183]cd /starting/directory; foo=/somewhere/else; bash -c "$1"; pwd[114482] перечисляет содержимое [114483]/starting/directory[114484] (поскольку [114485]cd ""[114486] не изменяет текущий каталог) и печатает [114487]/starting/directory[114488]. [12184]
40
27.01.2020, 19:35

Теги

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