求修改一小段 bash 脚本使之与 zsh 兼容

2021-03-01 12:44:12 +08:00
 xuegy

就 4 行代码应该难不倒大佬们

    paraview () {
        local _paraviews=(/Applications/[Pp][Aa][Rr][Aa][Vv][Ii][Ee][Ww]*.app)
        $_paraviews/Contents/MacOS/paraview "$@"
    }
    export -f paraview

这段只能在 bash 上跑,zsh 不认export -f,上网研究了半天,都说要把函数挪到 zshrc 里面,那就跟 bash 又不兼容了。

1856 次点击
所在节点    程序员
15 条回复
lululau
2021-03-01 13:12:12 +08:00
zsh 不支持导出函数
xuegy
2021-03-01 13:37:44 +08:00
@lululau 加 PATH 会有冲突的问题,所以才用的函数。那这个是不是无解了?
tankren
2021-03-01 13:45:52 +08:00
这一段用 bash 写,加个头#!/usr/bin/env bash
然后 zsh 里面调用?
xuegy
2021-03-01 14:03:39 +08:00
@tankren
```
#!/usr/bin/env bash
echo $SHELL
```
结果返回
```
/bin/zsh
```
还是没法用
AngryPanda
2021-03-01 14:04:01 +08:00
都说要把函数挪到 zshrc 里面,那就跟 bash 又不兼容了。
----------------
这样如何:

if [ "$0" == "bash" ]; then
export -f
fi
AngryPanda
2021-03-01 14:05:05 +08:00
@xuegy $SHELL 返回的是默认 shell, $0 是当前 shell
tankren
2021-03-01 14:05:35 +08:00
@xuegy #4 结果写入文件 zsh 再去读取
xuegy
2021-03-01 14:12:52 +08:00
@AngryPanda 这一段根本就不是可执行文件,是有另一个脚本加载这段文本,所以 hangbang 无效,$0 是空的。
omph
2021-03-01 14:47:01 +08:00
独立成文件,用之前 source 一下不行么?
TimePPT
2021-03-01 14:48:06 +08:00
如果需求是 macOS 下快速用某 app 打开文件,直接用 open 命令得了
initd
2021-03-01 14:51:07 +08:00
本地脚本
bash a.sh

网络脚本
bash <(curl -L get.zsh.one)
initd
2021-03-01 14:57:14 +08:00
有些命令 zsh 就是执行不了,
之前用 certbot 就遇到了这种问题
initd
2021-03-01 14:58:15 +08:00
建议用 ruby 写脚本,比 bash 正常多了
xuegy
2021-03-01 15:01:22 +08:00
@TimePPT 我试过 open 了,参数传不进去。
xuegy
2021-03-01 15:13:49 +08:00
@TimePPT 这个软件本来是 linux 上的,标准的打开方式是加 PATH 。在 mac 上要打个小补丁才能用,所以就变成这样了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/757222

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX