首页 > 解决方案 > Bash:用变量组合url并将其发送到浏览器

问题描述

我想编写一个在 Firefox 中打开 Jupyter Notebook 的命令,但我在 bash 中苦苦挣扎。

# This is what I want to achieve:
$ firefox --new-tab localhost:8888/tree/notebooks/my_notebook.ipynb

到目前为止,我可以将 url 回显到笔记本:

$ cd notebooks
$ var="my_notebook.ipynb"
$ echo localhost:8888/tree/${PWD}/${var} | sed 's/\/home\/johndoe\///g'
localhost:8888/tree/Dropbox/notebooks/my_notebook.ipynb

如何将上面的字符串传递给 Firefox 命令?我尝试使用命令替换$()、管道|、引号,但没有成功。

我假设 jupyter-notebook 从我的主目录运行/home/johndoe。如果您可以传递$HOME给该sed命令,则加分

解决方案:我创建了一个函数(不是别名),它在 Firefox 中的文件或目录中打开 Jupyter Notebook,如下所示:

nb() { 
firefox --new-tab "$(echo localhost:8888/tree/$(realpath --relative-to="$HOME" "${PWD}")/$1)" & 
}

标签: bash

解决方案


我尝试使用命令替换 $()、管道 |、引号,但没有成功。

真的吗?只是:

firefox --new-tab "$(echo localhost:8888/tree/${PWD}/${var} | sed 's/\/home\/johndoe\///g')"

如果您可以将 $HOME 传递给该 sed 命令,则可以加分

使用不同的分隔符 -~你应该足够安全。并了解如何在 shell 中引用。

sed "s~$HOME~~g"

您可以通过以下方式获取相对路径:

realpath --relative-to="$HOME" "$PWD"

知道如何使用 $1 而不是 $var 将它放在别名中吗?

使用函数

some_function() {
    if (($# == 0)); then
        echo "Missing argument"
        return 1
    fi
    firefox --new-tab "localhost:8888/tree/$(realpath --relative-to="$HOME")/$1"
}

推荐阅读