我有这样的命令:
docker run -p 8080:8080 -p 8081:8081 --pull always -u $(id -u):$(id -g) -v $HOME/livebooks:/data ghcr.io/livebook-dev/livebook
将记录如下内容:
latest: Pulling from livebook-dev/livebook
Digest: sha256:32095aae51bbb4ed11c4c7a9bffcd1157b9f93ec3c8b90cc3c8abe79e56c8166
Status: Image is up to date for ghcr.io/livebook-dev/livebook:latest
[Livebook] Application running at http://0.0.0.0:8080/?token=u3yt4bc43roox6ziw33joymhyvwhnyxi
由于某些原因,输出是stderr
。
这是一个长时间运行的过程,我希望它保持这种状态,这样我就可以用Ctrl+c
杀死它。
我想把它管道到grep
或rg
来获取URL并打开它。
现在我正在做的是:
docker run --rm -p 8080:8080 -p 8081:8081
--pull always -u $(id -u):$(id -g)
-v $HOME/livebooks:/data ghcr.io/livebook-dev/livebook
2>&1
| rg -m 1 -o 'http://.*'
| xargs xdg-open
但是是否有一些tee
或cat
魔法来打开网页,但也有完整的日志(和未来的日志)进入shell?
这应该达到您的期望:
#!/usr/bin/env bash
container=livebook
{ while sleep 1; do
url="$(docker logs $container 2>/dev/null | grep -Po 'Application running at K(.*)')"
test -z "$url" || break
done
open "$url"
} &
docker run --name $container -p 8080:8080 -p 8081:8081 --pull always -u $(id -u):$(id -g) -v $HOME/livebooks:/data ghcr.io/livebook-dev/livebook 2>&1