2014-12-31 3 views
1

Я хочу получить результат следующей команды в переменную.bash command substitution escaping

xprop -name "google-chrome-stable" | grep "window id" | awk '{print $5}' | awk '{print $1}' 

результат должен выглядеть примерно так, что

OUTPUT=xprop -name "google-chrome-stable" | grep "window id" | awk '{print $5}' | awk '{print $1}' 
echo $OUTPUT 

Я знаю, это может быть сделано с подстановкой команд. Примеры в Link command substitution недостаточно подробны, потому что они не объясняют, как избежать кавычек и апострофов. Может ли кто-нибудь помочь мне узнать, как это решить?

+0

Какой идентификатор окна вы пытаетесь получить с этого выхода? В некоторых из моих окон есть по крайней мере три строки, которые соответствуют «id окна». –

+0

Я пытаюсь получить идентификатор окна, чтобы использовать его с помощью xdotool, чтобы поместить мои окна на экран. есть ли у вас какие-нибудь идеи, для чего могут быть эти разные «оконные идентификаторы»? существуют ли в некоторых ваших окнах разные идентификаторы окон? – divramod

+0

Если вы запустили эту команду 'xprop' сами по себе, какая строка в выходе точно (и для какого свойства) это строка, которую вы ищете? И да, некоторые мои окна имеют более одной строки, которая соответствует поиску 'window id'. –

ответ

1

Похоже, вам просто нужно сделать, это:

output=$(xprop -name "google-chrome-stable" | awk '/window id/{print $5}') 
echo "$output" 

Там нет необходимости делать какие-либо спасаясь в $(). Я завернул переменную, чтобы ее эхом отдавали в двойных кавычках, чтобы предотвратить появление таких событий, как расширение glob. В качестве бонуса я объединил команды grep и awk и удалил последний, который ничего не полезен.

Я также сделал ваше имя переменной в нижнем регистре. Имена переменных верхнего регистра должны быть зарезервированы для внутренних оболочек. Вы поблагодарите меня за этот день, когда у вас есть переменная под названием $PATH, и внезапно все перестает работать ...

+0

Вы правы, второй awk пытался что-то сделать. thx для других подсказок. – divramod

1

Если вы пытаетесь получить окно лидера группы, вы можете использовать следующее.

output=$(xprop -notype -f WM_HINTS "32mx" ' ?m6($8)\n' -name google-chrome-stable WM_HINTS | awk '{print $2}') 
echo "$output" 

Аргументы -f были выведены из самого источника xprop и какой-то человек, страница чтения о format и dformat.

Description раздел xprop man page объясняет все о format и dformat.

+0

@TomFenech No. Спасибо. Это была ошибка опечатки/контекста (я работал с несколькими минутами раньше). –

+0

hey etan, я попробовал вашу команду xprop с открытым google-chrome, но не смог получить результат. не могли бы вы кратко объяснить, что означает [1] -notype -f WM_HINTS «32mx», [2], что «? m6 ($ 8) \ n» означает [3] -name «НЕ УБИТЬ» WM_HINTS. Я на самом деле ищущий google-хром-стабильный лидер, чтобы переместить это окно с помощью xdotool, кроме моего терминала, и дать ему предопределенный размер. [4] Не могли бы вы объяснить, что означает окно лидера группы для хрома? – divramod

+0

@ArvidPetermann Bah, «DO NOT KILL» - это тестовое окно, которое я использовал. Вместо этого вам нужно имя вашего окна. Извини за это. '-notype' сообщает' xprop' не включать информацию о типе в выходной файл (просто немного очищает выход). '-f hint format dformat' определяет формат для подсказки. Я мог бы заняться более подробными подробностями, но я бы тяжело взломал с страницы руководства, и вы можете сделать это сами, если вам будет интересно. Достаточно сказать, что он запрашивает только идентификатор окна лидера группы WM_HINTS без остальной информации. 'WM_HINTS' в конце запрашивает только одно поле информации. –