Как я могу сохранить/восстановить положения окна, когда я расстыковываю/прикрепляю свой ноутбук?

Если Вы хотите представить a ИЛИ в grep, начинание его с REGEXP является неправильным путем. Попробуйте -e опция к grep вместо этого:

grep -e PATTERN1 -e PATTERN2 your_file

будет соответствовать строкам PATTERN1 или PATTERN2.

9
31.12.2012, 05:03
3 ответа

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

https://groups.google.com/d/topic/xdotool-users/ns-pHfwQErc/discussion

1
27.01.2020, 20:08

Это может показаться невозможным, но вы можете использовать опцию grep -f , чтобы использовать этот список слов, даже если они находятся в переменной среды, а не в правильном файле. Хитрость в том, чтобы обмануть grep , думая, что они из такого файла:

$ ssh machineB 'grep -f <(echo $wordsToInclude|tr , "\n") file1 file2 file3'

Это запустит grep... команда удаленно через ssh на machineB. Потребуется переменная $ wordToInclude и переключить запятые на конец символов строки (, - > \n ). Этот список слов затем подается в grep через его переключатель -f .

Чтобы выполнить это через список исключений, просто добавьте это как 2-ю группу после начальной по трубе.

$ ssh machineB 'grep -f <(echo $wordsToInclude|tr , "\n") \
    file1 file2 file3 | grep -vf <(echo $wordsToExclude)'
-121--95331-

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

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

Лучше всего было бы покинуть ./. Это не причиняет вреда.

Если список файлов для

find . … | sed 's!^\./!!'

Обратите внимание, что это ограничивает некоторые имена файлов, содержащие новые строки. Обычно это не проблема для человеческого потребления, и результат find не подходит для программного потребления, поскольку он неоднозначен. Если вы используете -print0 , который подходит для использования программы, возможно, вас все равно не волнует префикс ./.

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

  • . опущен.
  • Все файлы с точками (файлы, имя которых начинается с . или.. ') опущены.
  • При наличии имени файла в текущем каталоге, имя которого начинается с - (или файла с именем ! или (...), он будет интерпретирован как вариант или предикат с помощью find .

Если фильтр исключает текущий каталог, первая точка не имеет значения. Во втором пункте можно использовать узоры ..? *. [!.] * * для сопоставления всех файлов в текущем каталоге, но необходимо проверить, соответствует ли каждый образец хотя бы одному файлу, и пропустить его, если нет. Это возможно, но очень громоздко. Последняя точка - стопор. Так что find * может быть пригоден для быстрого использования командной строки, но не использовать его в сценарии.

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

printf '%s\n' **/*.h

Это должно быть активировано shopt -s globstar в bash и set -o globstar в ksh93,и не существует в базовой оболочке POSIX, такой как тире. Файлы точек не будут проходить по умолчанию; чтобы включить их, сначала сделайте глоббинг не игнорируя файлы точек с помощью shopt -s dotglob в bash или FIGNORE = '@ (. |..)' в ksh93. Также, если совпадений нет, то эта команда печатает образец; запустите shopt -s nullglob в bash для печати пустой строки и используйте образец ~ (N) * */* .h в ksh.

В zsh рекурсивный глоббинг включен по умолчанию. Используйте квалификатор glob D для включения файлов точек и N для печати пустой строки при отсутствии совпадений (по умолчанию zsh выдает ошибку, если образец не соответствует файлу). Вы можете использовать printf как выше или

print -rl -- **/*.h(DN)
-121--47162-

Я задал аналогичный вопрос при запросе ubuntu, и принятый ответ содержит (не-ubuntu specific) сценарии оболочки для сохранения/восстановления позиций окна.

Ключевой пункт является использование wmctrl для перечисления активных окон и xwininfo для запроса их геометрии, а затем wmctrl для восстановления геометрии каждого окна.

wmctrl устанавливается отдельно.

1
27.01.2020, 20:08

Я знаю, что это очень старый форум, но я наткнулся на него, когда сам искал решение... В итоге я потратил целых 3 рабочих дня, изучая, как писать скрипты на языке Auto HotKey, и создал хороший скрипт, который сохраняет размеры и положение окон, а затем восстанавливает их после -пристыковки компьютера! Посмотрите и не стесняйтесь загружать или разветвлять его с GitHub, если вам это нравится:https://github.com/jkos95/Undocking-Script

Изменить :Это работает только для ПК с Windows, о которых я знаю!

0
06.10.2021, 19:33

Теги

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