Coproc в сценарии bash

То же самое должно работать и в nixos, хотя такие переменные, как EDITOR, скорее всего, должны быть в .profile. .bashrcIIRC предназначен только для интерактивных оболочек, поэтому экспортированные туда переменные не будут доступны в программах, запускаемых из меню среды рабочего стола.

Вы также можете установить environment.variables.VARIABLE = "VALUE";в configuration.nix, но это не совсем подходит для личных переменных, таких как EDITOR. (оф. если вы единственный пользователь, это не имеет большого значения)

0
22.08.2019, 15:14
1 ответ

Ваши сценарии закрываются, и bluetoothctlзавершается, как только echoвыполняется, что означает, что bluetoothctlможет не хватить времени для выполнения своей задачи. Вполне вероятно, что процесс co-завершает работу из-за получения сигнала PIPEпри попытке записать что-либо в стандартный вывод (, который закрывается выходом скрипта ).

Здесь у вас два варианта (вполне возможно, больше):

  1. Дождитесь завершения процесса co -перед завершением сценария. Вы делаете это с помощью wait "$COPROC_PID"перед окончанием скрипта. Это приведет к тому, что сценарий будет работать до тех пор, пока bluetoothctlне будет завершен каким-либо другим способом (, вы можете, например, отправить ему команду quitсо вторымecho).

  2. Просто передайте строку в bluetoothctlнапрямую:

    echo discoverable on | bluetoothctl
    

    или, используя здесь строку -

    bluetoothctl <<<'discoverable on'
    

    Это приведет к завершению bluetoothctlпосле выполнения команды. Сценарий завершается, когда выполняется bluetoothctl.

0
28.01.2020, 03:20

Теги

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