Bash -Подстановка переменных в подоболочке Makefile

У меня процесс xautolock все еще работал в фоновом режиме, но он не прослушивал никакие xautolock -locknowкоманды. Как упоминал @jrm, приложение должно подавлять «скринсейвер» . Для нас обоих это произошло из-за того, что mpv (видеоплеер )отключил заставку.

Для MPV исправление заключается в добавлении следующего к ~/.config/mpv/configили~/.mpv/config:

stop-screensaver=no

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


Если вы хотите предотвратить автоматическую блокировку экрана во время воспроизведения видео , одним из распространенных способов является использование функции «углы» xautolock:

xautolock -corners 000- -cornersize 30

С помощью приведенной выше команды, если вы поместите курсор мыши в нижний правый угол экрана (в радиусе 30 пикселей ), автоматическая -блокировка будет временно отключена.


Еще одна вещь, которую стоит попробовать, это опция -resetsaver:

xautolock -resetsaver

Или опция -detectsleep:

xautolock -detectsleep
0
21.12.2020, 13:35
2 ответа

Возьмите скрипт и заставьте его работать вне make.

  • запустить егоshellcheck
  • проверить

Вы обнаружите проблему с кавычками.

0
18.03.2021, 22:42

make вызываетsh(по умолчанию, если вы не изменитеSHELLmakeпеременную )для интерпретации кода (один shвызов на строку, если вы не используете \в конце каждой строки ).

Здесь вы хотите, чтобы $$MYTEXT, поэтому $MYTEXTбыли встроены в код sh, но вы также хотите, чтобы $MYTEXTне расширялся этим sh, а передавался в коде bash., так что расширение должно быть предотвращено либо с помощью \внутри двойных -кавычек, либо с использованием одинарных кавычек -вместо двойных -кавычек. В любом случае, поскольку вы хотите, чтобы bashрасширял $MYTEXT, вы не хотите, чтобы $MYTEXTв коде bashзаключалось в одинарные -кавычки.

Так:

test:   
    (cd subdirectory && \
      docker-compose exec webserver bash -c '\
        MYTEXT=hello && \
        echo "this is $$MYTEXT world" > /tmp/file && \
        cat /tmp/file \
      '\
    )

Если вы запустите strace -s999 -fe execve make, вы увидите здесь (с заменой docker-compose exec webserver bashна bash):

.
[pid 22370] execve("/bin/sh", ["/bin/sh", "-c", "(cd subdirectory && \\\n  exec bash -c '\\\n    MYTEXT=hello && \\\n    echo \"this is $MYTEXT world\" > /tmp/file && \\\n    cat /tmp/file \\\n  '\\\n)"], 0x555ce503e620 /* 52 vars */) = 0
strace: Process 22371 attached
[pid 22371] execve("/bin/bash", ["bash", "-c", "\\\n    MYTEXT=hello && \\\n    echo \"this is $MYTEXT world\" > /tmp/file && \\\n    cat /tmp/file \\\n  "], 0x563430f3e8f8 /* 52 vars */) = 0
[pid 22371] execve("/bin/cat", ["cat", "/tmp/file"], 0x55e9509edc10 /* 52 vars */) = 0
this is hello world

В любом случае подоболочка (...)здесь не нужна, так как cdизменит только рабочий каталог того одного процесса, выполняющего этот один shвызов, не затрагивая рабочий каталог любой другой оболочки, запущенной позже. с помощью makeдля запуска других команд.

3
18.03.2021, 22:42

Теги

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