stdin에서 오는 bash 스크립트에 첫 번째/두 번째 인수를 추가하는 방법

stdin에서 오는 bash 스크립트에 첫 번째/두 번째 인수를 추가하는 방법

나는 이것을 가지고있다:

bash <(
  curl_url='https://raw.githubusercontent.com/oresoftware/run-tsc-if/master/run.sh'
  curl -H 'Cache-Control: no-cache' --silent "$curl_url"
)

해당 URL의 bash 스크립트는 매개변수를 사용합니다 $1. 이 실행 스타일을 사용하여 매개변수를 전달하는 방법이 있습니까, 아니면 환경 변수를 사용해야 합니까?

나는 이것이 효과가 있을 것이라고 생각했는가?

bash "first arg" <(
  curl_url='https://raw.githubusercontent.com/oresoftware/run-tsc-if/master/run.sh'
  curl -H 'Cache-Control: no-cache' --silent "$curl_url"
)

하지만 이건 추측일 뿐이고 잘못된 것 같습니다..

내 테스트에 따르면 이것이 올바른 것 같습니다.

bash  <(
  my_url='https://raw.githubusercontent.com/oresoftware/run-tsc-if/master/run.sh'
  curl -H 'Cache-Control: no-cache' --silent "$my_url"
) "first arg"  # add the argument here

누군가 이것을 확인할 수 있다면 좋을 것 같습니다. 다음과 같이 확인됩니다.

bash <(echo 'echo "first: $1"') 'blaq'

다음과 같이 에코됩니다.

첫째 : 브랙

답변1

당신은 그것을 사용할 수 있습니다프로세스 교체그리고 생성된 스크립트를 Bash의 표준 입력으로 리디렉션합니다.

$ bash -s 'first argument' 'second argument' < <(echo 'printf "%s\n" "$@"')
first argument
second argument

명령을 다음 echo으로 바꾸면 curl됩니다.

에서 man bash:

-s 옵션이 있거나 옵션 처리 후 남은 인수가 없는 경우 표준 입력에서 명령을 읽습니다. 이 옵션을 사용하면 대화형 쉘을 호출할 때 위치 매개변수를 설정할 수 있습니다.

답변2

이것들은 모두 작동하는 것 같습니다:

bash <(echo 'echo "first: $1 second: $2"') '111' '222'

그리고

bash -s '111' '222' < <(echo 'echo "first: $1 second: $2"')

첫 번째 매개변수처럼 bash는 첫 번째 매개변수에서 파일 설명자를 읽고, 두 번째 매개변수에서는 표준 입력에서 읽습니다.

관련 정보