[英]Bash: compose url with variables and send it to browser
我想在 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
命令,则可获得奖励积分
解决方案:我创建了一个 function(不是别名),它在文件或目录的 firefox 中打开 Jupyter Notebook,如下所示:
nb() {
firefox --new-tab "$(echo localhost:8888/tree/$(realpath --relative-to="$HOME" "${PWD}")/$1)" &
}
我尝试使用命令替换 $()、管道 |、引号,但没有成功。
真的吗? 只是:
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 将它放在别名中吗?
使用 function
some_function() {
if (($# == 0)); then
echo "Missing argument"
return 1
fi
firefox --new-tab "localhost:8888/tree/$(realpath --relative-to="$HOME")/$1"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.