當您在線創建教程供人們在單個終端中使用時,有時最好獲取內聯代碼......但是這些都沒有像我預期的那樣工作。我希望foo
成為所有這些的“酒吧”。有人知道為什麼嗎?
#!/usr/bin/env bash
source <(echo "export foo=bar");
echo "$foo"
source <(cat <<< "export foo=bar");
echo "$foo"
source <(cat <<EOF
export foo=bar
EOF
);
echo "$foo"
我唯一的猜測是source
無法從檔案描述符中讀取?我也嘗試使用.
而不是source
相同的東西。
我在MacOS上,bash --version
輸出:
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18) Copyright (C) 2007 Free Software Foundation, Inc.
答案1
這在 4.0 版之前的版本中不起作用bash
(例如,bash
macOS 上的預設版本為 3.2.57(1) 版)。
4.0 版有一個錯誤修復:
修復了導致“.”的錯誤無法從非常規檔案(例如裝置或命名管道)讀取和執行命令。
(那是來自https://tiswww.case.edu/php/chet/bash/CHANGES)
source
當您將其與進程替換一起使用時, ( 或)讀取的文件.
不是常規文件,因此它會觸發版本 4.0 中修復的錯誤。
目前最新版本是 5.0.7(1),您的程式碼可以如預期般運作。