인라인 텍스트를 소싱하는 방법

인라인 텍스트를 소싱하는 방법

사람들이 단일 터미널에서 사용할 수 있도록 온라인 튜토리얼을 만들 때 인라인 코드를 소스로 제공하는 것이 좋을 때도 있습니다. 그러나 이들 중 어느 것도 예상한 대로 작동하지 않았습니다. 나는 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(예: bashmacOS의 기본값인 릴리스 3.2.57(1)).

릴리스 4.0에는 버그 수정이 있었습니다:

'.'을 발생시키는 버그를 수정했습니다. 장치나 명명된 파이프와 같은 비정규 파일에서 명령을 읽고 실행하는 데 실패합니다.

(그건https://tiswww.case.edu/php/chet/bash/CHANGES)

프로세스 대체와 함께 사용할 때 source(또는 ) 이 읽는 파일은 일반 파일이 아니므로 릴리스 4.0에서 수정된 버그를 유발할 수 있습니다..

최신 릴리스는 현재 릴리스 5.0.7(1)이며, 여기서 코드는 예상대로 작동합니다.

관련 정보