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'
這將回顯:
第一個: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 時設置位置參數。