带“&”的后台进程和缓冲问题

带“&”的后台进程和缓冲问题

我已在 ~/.bashrc 文件中编写了此脚本,并且已获取该文件,但它无法正常工作。其目的是在新选项卡中打开 Chrome 浏览器中 jupyter 笔记本提供的链接。

chrome(){
        echo $1 # <--- shows that jupfire is sending an empty string
        # I'm using Windows Subsystem for Linux
        "/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe" $1
}

jupfire(){
        jupyter notebook 2>juptemp &
        sleep 3
        chrome "$(tail -1 juptemp | grep http)"
        rm juptemp
}

经过搜索并尝试了一些不成功的方法后,我得出的结论是这与 I/O 缓冲有关。可能是“jupfire”函数第一行后面的“&”导致stderr无法刷新到juptemp中,因此一个空字符串被发送到chrome函数。

看来我应该使用“stdbuf”,但我不知道如何通过检查手册页,我想出了这个:stdbuf -e0 jupyter notebook 2>juptemp &作为 jupfire 函数的第一行,但它仍然不起作用。(要清楚,通过“不工作”我的意思是它正在 Chrome 浏览器中打开一个新选项卡,其地址栏为空)。如果问题出在缓冲上,您能指导我以正确的方式使用冲洗吗?谢谢。

编辑:这是命令“jupyter notebook”的示例输出:

...
To access the notebook, open this file in a browser:
    file:///home/mojtabaa/.local/share/jupyter/runtime/nbserver-28353-open.html
Or copy and paste one of these URLs:
    http://localhost:8888/?token=2ead351a97edd97dc5b5fd0aa80b6872af9f9e5c6b9ef10b

相关内容