Как получить встроенный текст

Как получить встроенный текст

Когда вы создаете онлайн-уроки для людей, которые могут использовать их в одном терминале, иногда приятно иметь встроенный код... однако ни один из них не работал так, как я ожидал. Я ожидал, fooчто для всех них будет "bar". Кто-нибудь знает, почему?

#!/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

Это не будет работать в bashверсиях до версии 4.0 (например, в версии по умолчанию bashв macOS 3.2.57(1)).

В версии 4.0 была исправлена ​​ошибка:

Исправлена ​​ошибка, из-за которой `.' не мог читать и выполнять команды из необычных файлов, таких как устройства или именованные каналы.

(это изhttps://tiswww.case.edu/php/chet/bash/ИЗМЕНЕНИЯ)

Файл, считываемый source(или .), когда вы используете его с подстановкой процесса, не является обычным файлом, поэтому он может вызвать ошибку, исправленную в версии 4.0.

Последней версией на данный момент является версия 5.0.7(1), в которой ваш код работает так, как и ожидалось.

Связанный контент