我有这个:
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 选项,或者选项处理后没有剩余参数,则从标准输入读取命令。该选项允许在调用交互式 shell 时设置位置参数。
答案2
这些似乎都有效:
bash <(echo 'echo "first: $1 second: $2"') '111' '222'
和
bash -s '111' '222' < <(echo 'echo "first: $1 second: $2"')
看起来像第一个,bash 正在从第一个参数读取文件描述符,在第二个参数中,它从标准输入读取。