Мне удалось решить эту проблему, упростив ее и сохранив вывод во временный файл, вместо того, чтобы пытаться передать все сразу.
michael@DESKTOP-OI3AOU6:~$ ~/anaconda3/bin/jupyter lab ~ 2> >(tee /tmp/jlab ) & sleep 4 ; cat /tmp/jlab | grep ^[[:blank:]].*http.* | tr -d " \t\n\r" | xargs firefox.exe -P jupyterlab ; rm /tmp/jlab; %
Проходя по каждой секции построчно для справки других:
~/anaconda3/bin/jupyter lab ~
& rarr; Запустите лабораторный сеанс jupyter в домашнем каталоге (~).
2>
& rarr; Записать стандартную ошибку в файл, следующий за ней.
>()
& rarr; Разрешить попадание каналов в файлы на стандартный ввод прилагаемой команды.
tee /tmp/jlab
& rarr; Перенаправить ввод во временный файл jlab и скопировать его в стандартный вывод. Так я сохраняю поведение исходной программы, отображающей информацию в терминале. Больше информации https://en.wikipedia.org/wiki/Tee_(command)
>(tee /tmp/jlab )
& rarr; Вывод передается в команду tee
&
& rarr; Разрешить процессу продолжаться в фоновом режиме.
sleep 4
& rarr; Подождите 4 секунды, чтобы сервер заработал.
;
& rarr; После того, как команда выполнит следующую команду
cat /tmp/jlab
& rarr; Записать содержимое временного файла / tmp / jlab в стандартный вывод.
|
& rarr; Передайте стандартный вывод программы слева на стандартный ввод программы справа. В этом случае cat /tmp/jlab
в grep ^[[:blank:]].*http.*
.
grep ^[[:blank:]].*http.*
& rarr; Извлекает строки, в начале которых есть пробел, а в строке содержится http. Это позволит любое количество символов между и после. В этом случае это работает очень хорошо, но если случайно обновление jupyter изменит выход, это то место, где оно сломается, и будет выбрано более подходящее регулярное выражение.
|
вывод grep piped до tr
tr -d " \t\n\r"
& rarr; Удаляет все символы табуляции и разрывы строк из строки.
|
Трубы выводятся из tr в xargs. Это полный URL, уникальный для сессии jupyter.
xargs firefox.exe -P jupyterlab
& rarr; Xargs берет свой стандартный ввод и передает его в качестве аргумента следующей команде.
В этом случае firefox.exe
, которая является мягкой ссылкой, которую я сохранил в /usr/local/bin/firefox.exe
, мягкая ссылка указывает на расположение смонтированных окон /mnt/c/
, которое находится в /mnt/c/Program Files/Mozilla Firefox/Firefox.exe
. Причина, по которой я монтирую его таким образом, является просто моим соглашением, поскольку исполняемые файлы Windows имеют лучшую визуализацию, чем программы, выполняемые в WSL и проходящие через xming.
-P jupyterlab & rarr; запускает созданный мной профиль, который удаляет вкладки и панель навигации из Firefox. Я также получил доступ к опции настройки в Firefox, так что заголовок показывает.
Профиль настраивается путем установки пользовательского CSS в определенном каталоге профиля %APPDATA%\Mozilla\Firefox\Profiles\
Полный путь к файлу: %APPDATA%\Mozilla\Firefox\Profiles\8vv7gs2r.jupyterlab\chrome\userChrome.css
Этот файл установит firefox, поэтому в нем не будет никаких вкладок или навигации, загромождающей окно.
Содержимое файла выглядит следующим образом:
/*
* Do not remove the @namespace line -- it's required for correct functioning
*/
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* set default namespace to XUL */
/*
* Hide tab bar, navigation bar and scrollbars
* !important may be added to force override, but not necessary
* #content is not necessary to hide scroll bars
*/
#TabsToolbar {visibility: collapse;}
#navigator-toolbox {visibility: collapse;}
;
& rarr; После того, как команда выполнит следующую команду
rm /tmp/jlab
& rarr; Линия котельной пластины, которая удаляет временный файл. Обычно его следует удалять при перезагрузке системы linux, но он работает не во всех реализациях. Я не проверял, делает ли это wsl.
;
& rarr; После того, как команда выполнит следующую команду
%
& rarr; Перемещает последнее задание, перемещенное в фоновом режиме, с &
на передний план. Программа, которая теперь выполняется, теперь будет принимать прерывания, как это было до ее перемещения в фоновый режим.