Bash
我可以使用 shebang 將文件源本身放入目前的 bash 環境嗎?
我有越來越多的腳本,這些腳本應該是來源的,而不是執行的。目前他們有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 會話和其他項目隔離開來的好處。