Bash

如何將第一個/第二個參數添加到來自標準輸入的 bash 腳本

  • September 6, 2019

我有這個:

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'

這將回顯:

第一個:blaq

這些似乎都有效:

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

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

看起來像第一個,bash 正在從第一個參數中讀取文件描述符,在第二個中,它正在從標準輸入讀取。

您可以使用程序替換並將生成的腳本重定向到 Bash 的標準輸入:

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

echo命令替換為curl,你很好。

來自man bash

如果存在 -s 選項,或者在選項處理後沒有保留任何參數,則從標準輸入讀取命令。此選項允許在呼叫互動式 shell 時設置位置參數。

引用自:https://unix.stackexchange.com/questions/539290