簡體   English   中英

Bash shebang 被忽略 - 腳本仍然使用 zsh 執行

[英]Bash shebang is ignored - script is still executed with zsh

我在 Mac OSX 上有一個腳本,它在打開新終端時執行。 它在.zprofile指定。 它有一個 bash shebang,但它仍然使用 zsh(我的默認 shell)執行。 這里可能有什么問題?

#!/bin/bash

核心問題是由於 zsh 語法的差異,我無法執行腳本。 當我分析可能導致這種情況的原因時,我認識到 shebang 只是被忽略了。

我有一個二進制 /bin/bash 順便說一句。

編輯:

~/.zprofile像這樣執行腳本:

. ~/.script.bash

您已經在~/.zprofile了以下行:

. ~/.script.bash

這類似於

source ~/.script.bash

這意味着您的腳本是來源而不是執行的。 你應該有類似的東西:

~/.script.bash

相反,它將在由 shebang 定義的環境中執行。 請注意,該文件需要是可執行的。

. file [ arg ... ] . file [ arg ... ]file讀取命令並在當前shell 環境中執行它們。

來源: man zshall

當您“獲取”一個腳本文件(即. <script-file-name> )時,文件中的命令將在當前 shell 中執行,使用當前 shell 的語法。 文件中的任何“shebang”行都被解釋為 shell 注釋並被忽略。

如果腳本文件中的shell命令可以通過執行該文件來運行,則可以將其設為可執行文件並將其作為命令運行。

但是,當您執行 shell 腳本時,執行發生在子進程中。 這意味着需要改變當前 shell/進程狀態的事情將無法工作。 像:

  • 更改此 shell 的環境變量
  • 定義此 shell 的函數或別名
  • 改變這個 shell 的工作目錄
  • 改變這個 shell 的 ulimit
  • 等等

如果您需要做那種事情,您別無選擇,只能將您的bash腳本轉換為zsh腳本,以便您可以在zsh “獲取”它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM