bash - 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)" &
}
解决方案
我尝试使用命令替换 $()、管道 |、引号,但没有成功。
真的吗?只是:
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"
}
推荐阅读
- php - 抽象继承文件应该如何用 PSR-4 和 composer 组织?
- docker - Kubernetes集群中部署的Pod的谷歌云凭证?
- docker - 无法在 Docker 上运行 dotnet core 2.1 项目
- python - EVT_TEXT 事件上的 .Skip() 有什么作用吗?
- javascript - VueJS 中对 window.innerwidth 的计算属性反应
- hibernate - 如何在实体上创建一个 Hibernate/JPA 触发器,该触发器将在该实体更新后在表中创建一个新条目
- twitter-bootstrap - Bootstrap CSS 行填充父列
- python - 切换框架时重建小部件
- html - html / css中移动视图中的水平滚动
- python - 如何在 MacOS 上彻底卸载 python 2.7