>백엔드 개발 >Golang >한 줄 함수 선언을 포함하여 Go를 사용하여 동적 bash 스크립트 실행

한 줄 함수 선언을 포함하여 Go를 사용하여 동적 bash 스크립트 실행

WBOY
WBOY앞으로
2024-02-05 23:09:11851검색

"使用

질문 내용

저는 go에서 bash 작업 러너를 작성하고 있는데 간단한 개념이 있습니다:

  1. 작업 정의(간단한 bash 함수 선언)가 포함된 bash 스크립트인 taskfile 이라고 읽습니다.
  2. 추가 콘텐츠를 동적으로 추가합니다
  3. 전달된 매개변수에 따라 명령을 실행

다음은 간단한 예입니다:

으아아아

지금 내 문제는 go를 통해 실행하면 작동하지 않고 이 오류가 발생한다는 것입니다

으아아아

그러나 생성된 스크립트를 셸에서 직접 실행하면 작동합니다.

으아아아

내가 여기서 뭘 잘못하고 있는 걸까요?


정답


우선, 여기서는 말이 안 됩니다.

얻지 못할 것은 아무것도 얻지 못할 것입니다:

으아아아

생략하면 코드가 더 간단해집니다.

두 번째: 이유

를 설명하세요.

셸에서 실행하는 경우:

65be85239 침대 5

... $()"을 둘러싼 것들은 실행 중인 bash 복사본의 구문이 아니라 명령을 구문 분석하는 bash 복사본의 구문입니다. /em>. 명령 대체의 결과가 문자열 분할이나 와일드카드의 영향을 받지 않고 문자열로 전달될 것이라고 bash 복사본에 알려줍니다.

마찬가지로 $(cat <<eofeof 和最终的 )" 也是交互式 shell 的指令,而不是它调用的非交互式 shell。它是运行的交互式 shell cat (包含连接到其标准输入的heredoc内容的临时文件),读取 cat 副本的标准输出,然后将该数据替换为传递给 bash -c에 대한 단일 인수입니다.

go 프로그램에는 대화형 쉘이 없으므로 이러한 모든 단계를 수행하려면 쉘 구문이 아닌 go 구문을 사용해야 합니다. 이 단계가 진행되는 한 첫 번째 위치로 이동할 이유가 없습니다(임시 파일에 데이터 파일을 쓸 필요가 없고, 해당 파일의 내용을 /bin/cat 읽을 필요도 없고, 실행하기 위해 하위 프로세스를 사용할 필요도 없습니다). 문자열을 생성하는 명령 대체(최종 쉘의 명령줄에 배치됨)이므로 이러한 모든 단계를 무시하는 것이 더 현명합니다.

위 내용은 한 줄 함수 선언을 포함하여 Go를 사용하여 동적 bash 스크립트 실행의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제