Когда я делаю это в терминале (zsh)
Код: Выделить всё
ADDRESS=$(wmctrl -l | grep -E "Picture in picture" | awk 'NR==2 {print $1}')
echo "address is: ${ADDRESS}"
И это здорово, поскольку это ожидаемый результат.
Однако, когда я сделайте то же самое в скрипте:
./pop_up.sh
Код: Выделить всё
#!/bin/bash
ADDRESS=$(wmctrl -l | grep -E "Picture in picture" | awk 'NR==2 {print $1}')
echo "address is: ${ADDRESS}"
Для адреса ничего не выводится, хотя это та же самая команда, которая заставляет меня думать, что я не назначаю вывод правильно выполнить команду, или это проблема с тем, как я использую awk (?).
Что я пробовал:
- с помощью обратные кавычки (``) вместо $(), но все равно без изменений.
- Когда я делаю ADDRESS=date, я получаю дату, как и ожидалось, поэтому я не уверен, зачем назначать вывод даты работает, но назначение вывода приведенной выше команды — нет.
- Я также пытался диагностировать проблему, разделив три команды awk, grep и wmctrl. В этом случае я получаю эхо-вывод wmctrl и grep, но когда я достигаю awk, он не выводит результат фильтрации адреса из строки...
спасибо
изменить:
Согласно @EdMorton, вот отредактированный сценарий
Код: Выделить всё
#!/bin/bash
set -x;
foo=$(wmctrl -l);
echo "foo=$foo";
bar=$(wmctrl -l | grep -E "Picture in picture");
echo "bar=$bar"
ADDRESS=$(wmctrl -l | awk '/Picture in picture/ && c++{print $1; exit}')
echo "address is: ${ADDRESS}"
изменить 2:
As @chrslg упомянул, что название терминала zsh меняется в зависимости от того, что в нем запущено в данный момент, поэтому во время wmctrl терминал zsh имеет имя окна «Картинка в картинке», требующее двух совпадений для получения желаемого результата при запуске из сценария нет окон с таким именем, поэтому для получения результата требуется одно совпадение. Итак, решено с NR==1

Подробнее здесь: https://stackoverflow.com/questions/784 ... -my-script