• 请不要在回答技术问题时复制粘贴 AI 生成的内容
xuegy
V2EX  ›  程序员

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

  •  
  •   xuegy · Mar 1, 2021 · 2599 views
    This topic created in 2074 days ago, the information mentioned may be changed or developed.

    就 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 又不兼容了。

    15 replies  •  2021-03-01 15:13:49 +08:00
    lululau
    lululau
    Mar 1, 2021
    1
    zsh 不支持导出函数
    xuegy
    xuegy
    OP
    Mar 1, 2021
    2
    @lululau 加 PATH 会有冲突的问题,所以才用的函数。那这个是不是无解了?
    tankren
    tankren
    Mar 1, 2021
    3
    这一段用 bash 写,加个头#!/usr/bin/env bash
    然后 zsh 里面调用?
    xuegy
    xuegy
    OP
    Mar 1, 2021
    4
    @tankren
    ```
    #!/usr/bin/env bash
    echo $SHELL
    ```
    结果返回
    ```
    /bin/zsh
    ```
    还是没法用
    AngryPanda
    AngryPanda
    Mar 1, 2021
    5
    都说要把函数挪到 zshrc 里面,那就跟 bash 又不兼容了。
    ----------------
    这样如何:

    if [ "$0" == "bash" ]; then
    export -f
    fi
    AngryPanda
    AngryPanda
    Mar 1, 2021
    6
    @xuegy $SHELL 返回的是默认 shell, $0 是当前 shell
    tankren
    tankren
    Mar 1, 2021
    7
    @xuegy #4 结果写入文件 zsh 再去读取
    xuegy
    xuegy
    OP
    Mar 1, 2021
    8
    @AngryPanda 这一段根本就不是可执行文件,是有另一个脚本加载这段文本,所以 hangbang 无效,$0 是空的。
    omph
    omph
    Mar 1, 2021
    9
    独立成文件,用之前 source 一下不行么?
    TimePPT
    TimePPT
    Mar 1, 2021
    10
    如果需求是 macOS 下快速用某 app 打开文件,直接用 open 命令得了
    initd
    initd
    Mar 1, 2021
    11
    本地脚本
    bash a.sh

    网络脚本
    bash <(curl -L get.zsh.one)
    initd
    initd
    Mar 1, 2021
    12
    有些命令 zsh 就是执行不了,
    之前用 certbot 就遇到了这种问题
    initd
    initd
    Mar 1, 2021
    13
    建议用 ruby 写脚本,比 bash 正常多了
    xuegy
    xuegy
    OP
    Mar 1, 2021
    14
    @TimePPT 我试过 open 了,参数传不进去。
    xuegy
    xuegy
    OP
    Mar 1, 2021
    15
    @TimePPT 这个软件本来是 linux 上的,标准的打开方式是加 PATH 。在 mac 上要打个小补丁才能用,所以就变成这样了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1415 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 18:49 · PVG 02:49 · LAX 10:49 · JFK 13:49
    ♥ Do have faith in what you're doing.