シェルスクリプトからユーザー入力を読み取り、スクリプトの実行が完了した後に行を入力に置き換える方法は?

シェルスクリプトからユーザー入力を読み取り、スクリプトの実行が完了した後に行を入力に置き換える方法は?

現在、ユーザーがOAuth資格情報を確認し、リフレッシュトークンを返すように要求するスクリプトがあります。ユーザーがリフレッシュトークンを直接入力する必要があるのは面倒です。ファイルを自動的に編集し、リフレッシュトークンがない場合は、リフレッシュする方法があると思います。たとえば、

#!/bin/bash
REFRESH_TOKEN=
if [ -z "$REFRESH_TOKEN" ]; then
   (opens a webpage for the user to authenticate themselves)
   (we then pull the refresh token programmatically and set it)
   REFRESH_TOKEN=$(some api call)
fi

ユーザーがREFRESH_TOKEN変数を空の状態でこのコマンドを実行している場合、リアルタイムまたは実行後に2番目の行を更新する方法はありますか?試してみましたが、やはり影響をsed受けて動作しません REFRESH_TOKEN=$(some api call)

ベストアンサー1

質問を誤解しないsed限り、正規表現を追加して^囲む$限り機能します。例えば

sed 's/^REFRESH_TOKEN=$/REFRESH_TOKEN={token}/g'REFRESH_TOKEN=行内の唯一の項目のみが一致するため、動作します。そのREFRESH_TOKEN=$(some api call)部分はそれに続く項目の影響を受けてはいけません。=

次のようにsedの範囲を制限することもできますが、 sed '2 s/REFRESH_TOKEN=/REFRESH_TOKEN={token}/g'これは次の場合にのみ良い解決策です。確認する交換する必要がある行は常に2行です。

おすすめ記事