Shell-Builtin

在不使用 shell 內置命令的情況下設置 shell 環境變數

  • July 16, 2013

我正在使用一個將“命令”作為參數的程序,然後在它周圍添加一些有用的包裝。大概是為了提供幫助,它似乎會檢查以確保命令“存在”。據我所知,這張支票類似於which. 在我的 bash shell 命令中,例如setexport是內置的,因此which不返回任何內容。

有沒有辦法在不使用內置 shell 的情況下設置環境變數。

我的想法是做一些類似定義set.sh的事情

#! /bin/bash
export $1

但這似乎有點瘋狂

不行。只有shell可以改變自己的環境;set並且export 必須始終是內置的。

也是如此cdalias依此類推。

我能建議的最好的方法是使用 shell 函式重新實現你的包裝器。您“來源”的那個或shell腳本。無論哪種方式,在shell中執行的包裝器都可以更順暢地完成這些事情。

原始問題的可能解決方法是包裝器的包裝器(不包括 Xzibit 圖像):

#!/bin/bash

command="$1"
temp=$(mktemp -d)

> "$temp/$command"
chmod a+x "$temp/$command"

PATH+=:$temp

your_wrapper

rm -r "$temp"

這將創建一個空的執行檔,它將通過您的包裝器的測試,而不會覆蓋您實際要執行的命令(內置命令)。

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