Bash

我可以使用 shebang 將文件源本身放入目前的 bash 環境嗎?

  • August 20, 2019

我有越來越多的腳本,這些腳本應該是來源的,而不是執行的。目前他們有shebang

#! /bin/cat

但我更希望在執行時將它們採購到 bash 中,就像我做的那樣

$ . /path/to/script.sh

或者

$ source /path/to/script.sh

但是bash 是內置的,那麼對於此類腳本是否有替代的 shebang 行.source

不,當shebang發揮作用時,您已經輸了。當一個程序是exec()’d 並且通常發生在分叉之後應用 shebang,所以你已經在一個單獨的程序中。讀取shebang的不是shell,而是核心。

正如使用者@muru 所說,這是不可能的,因為當你到達#!-line 時,你已經離開了 shell 會話。

但是,根據您的 shell 文件的用途,可能還有另一種解決方案。

我猜他們設置了您用於某些項目的環境變數。

讓我們稱之為一個項目subtool(因為那是我擁有的一個項目)。然後你可以有一個為項目設置 shell 環境的腳本,project-env例如:

#!/bin/bash

PROJECT="$1"
PROJECT_ROOT="$HOME/projects/$PROJECT"

cd "$PROJECT_ROOT" || exit 1
source "$PROJECT.env"

export PS1="[$PROJECT: \W] \$ "
exec bash -i

執行:

$ ./project-env subtool

這將自動cd進入下面的給定項目子文件夾$HOME/projects,讀取在這種情況下呼叫的項目環境文件subtool.env(在其中初始化變數),為您提供項目的命令行提示符並讓您進入互動式bash會話:

[subtool: subtool] $

完成工作後,只需exit.

這還具有將項目環境與“普通”登錄 shell 會話和其他項目隔離開來的好處。

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