如何将第一个/第二个参数添加到来自标准输入的 bash 脚本

如何将第一个/第二个参数添加到来自标准输入的 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

将命令替换echocurl,就可以了。

man bash

如果存在 -s 选项,或者选项处理后没有剩余参数,则从标准输入读取命令。该选项允许在调用交互式 shell 时设置位置参数。

答案2

这些似乎都有效:

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

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

看起来像第一个,bash 正在从第一个参数读取文件描述符,在第二个参数中,它从标准输入读取。

相关内容