Bash

如何在 zshrc 中獲取源文件以在 bash 中執行?

  • February 26, 2022

我有一個包含一堆函式的 bash 腳本。我希望這個腳本使用 bash 執行。該腳本在頂部有這個:

echo "BASH_VERSION""$BASH_VERSION"
echo "ZSH_VERSION""$ZSH_VERSION"

目前我可以看到腳本在 ZSH 中執行。

如何讓腳本使用 bash 執行?我#!/usr/bin/env bash在文件的頂部,但它仍然不起作用。我正在使用source.

如果您使用 執行腳本source,那麼腳本文件中的命令將由目前shell 環境執行,無論#!腳本的 -line 說什麼(該行只是一個註釋,在這種情況下將被忽略)。這就是這樣source做的。

如果您通過在命令行上提供腳本的路徑和名稱來執行腳本(例如,./myscript),那麼,假設文件是可執行的,它將由#!腳本開頭的 - 行中提到的解釋器執行. 文件中的函式定義和變數等將在腳本執行期間處於活動狀態,但隨後會在腳本終止時與腳本環境的其餘部分一起被銷毀。

如果腳本文件包含您想要在目前zshshell 環境中訪問的函式的定義,並且如果文件中的函式以與 shell 兼容的方式編寫zsh,那麼原始碼將是合適的做法。

如果函式是為bashshell 顯式編寫的(使用bash特定變數等),那麼您可能希望將應用程序的其餘部分編寫為單獨的bash腳本,並從該腳本中獲取包含函式的文件。或者,您可能希望為zshshell 重寫函式,然後在 shell 中獲取重寫的函式定義zsh

引用自:https://unix.stackexchange.com/questions/692174