So verwenden Sie Inline-Text als Quelle

So verwenden Sie Inline-Text als Quelle

Wenn Sie Online-Tutorials erstellen, die von Leuten in einem einzelnen Terminal verwendet werden können, ist es manchmal gut, Inline-Code als Quelle zu verwenden ... allerdings funktionierte nichts davon wie erwartet. Ich hätte erwartet, foodass bei allen davon „Bar“ angezeigt wird. Weiß jemand, warum?

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

Meine einzige Vermutung ist, dass das sourceLesen aus einem Dateideskriptor nicht möglich ist. Ich habe auch versucht, .anstelle sourcedesselben zu verwenden.

Ich verwende MacOS, bash --versionAusgabe:

GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18) 
Copyright (C) 2007 Free Software Foundation, Inc.

Antwort1

Dies würde in bashVersionen vor Version 4.0 nicht funktionieren (beispielsweise in der Standardversion bashvon macOS, die Version 3.2.57(1) ist).

Version 4.0 enthielt einen Bugfix:

Ein Fehler wurde behoben, der dazu führte, dass `.' Befehle aus nicht regulären Dateien wie Geräten oder benannten Pipes nicht lesen und ausführen konnte.

(das ist vonhttps://tiswww.case.edu/php/chet/bash/CHANGES)

Die von source(oder .) gelesene Datei, wenn Sie sie mit einer Prozessersetzung verwenden, ist keine normale Datei und würde daher den Fehler auslösen, der in Version 4.0 behoben wurde.

Die aktuellste Version ist derzeit die Version 5.0.7(1), in der Ihr Code wie erwartet funktioniert.

verwandte Informationen