저는 go에서 bash 작업 러너를 작성하고 있는데 간단한 개념이 있습니다:
taskfile
이라고 읽습니다. 다음은 간단한 예입니다:
으아아아지금 내 문제는 go를 통해 실행하면 작동하지 않고 이 오류가 발생한다는 것입니다
으아아아그러나 생성된 스크립트를 셸에서 직접 실행하면 작동합니다.
으아아아내가 여기서 뭘 잘못하고 있는 걸까요?
얻지 못할 것은 아무것도 얻지 못할 것입니다:
으아아아생략하면 코드가 더 간단해집니다.
셸에서 실행하는 경우:
65be85239 침대 5... $()
的 "
을 둘러싼 것들은 실행 중인 bash 복사본의 구문이 아니라 명령을 구문 분석하는 bash 복사본의 구문입니다. /em>. 명령 대체의 결과가 문자열 분할이나 와일드카드의 영향을 받지 않고 문자열로 전달될 것이라고 bash 복사본에 알려줍니다.
마찬가지로 $(cat <<eof
、eof
和最终的 )"
也是交互式 shell 的指令,而不是它调用的非交互式 shell。它是运行的交互式 shell cat
(包含连接到其标准输入的heredoc内容的临时文件),读取 cat
副本的标准输出,然后将该数据替换为传递给 bash -c
에 대한 단일 인수입니다.
go 프로그램에는 대화형 쉘이 없으므로 이러한 모든 단계를 수행하려면 쉘 구문이 아닌 go 구문을 사용해야 합니다. 이 단계가 진행되는 한 첫 번째 위치로 이동할 이유가 없습니다(임시 파일에 데이터 파일을 쓸 필요가 없고, 해당 파일의 내용을 /bin/cat
읽을 필요도 없고, 실행하기 위해 하위 프로세스를 사용할 필요도 없습니다). 문자열을 생성하는 명령 대체(최종 쉘의 명령줄에 배치됨)이므로 이러한 모든 단계를 무시하는 것이 더 현명합니다.
위 내용은 한 줄 함수 선언을 포함하여 Go를 사용하여 동적 bash 스크립트 실행의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!