タグ: bash

curl経由で実行するシェルスクリプトで標準入力を使いたい

症状

.gitconfigはGitで管理しておいて、git config user.name/user.emailは管理したくない | misty-magic.h
にある

GIT_CONFIG_LOCAL=~/.gitconfig.local
if [ ! -e $GIT_CONFIG_LOCAL ]; then
  echo -n "git config user.email?> "
  read GIT_AUTHOR_EMAIL

  echo -n "git config user.name?> "
  read GIT_AUTHOR_NAME

  cat < $GIT_CONFIG_LOCAL
[user]
  name = $GIT_AUTHOR_NAME
  email = $GIT_AUTHOR_EMAIL
EOF
fi

を含んだコードをgithubに保存し、

以下のような、よくあるcurlを使った呼び出し方

curl https://raw.githubusercontent.com/mistymagich/dotfiles/master/install.sh | bash

をすると、標準入力部分で入力待ちにならず、そのままエラー終了(終了コードが1)してしまう。

解決

linux – Execute bash script from URL – Stack Overflow

より、呼び出し方を変える

bash <(curl -s https://raw.githubusercontent.com/mistymagich/dotfiles/master/install.sh)

※"<"と"("を離すとbashの構文エラーになるので注意

.gitconfigはGitで管理しておいて、git config user.name/user.emailは管理したくない

Gitを使う上で、git config user.name/user.emailの設定は必要。そして.gitconfigなどのdotfilesをgithubで管理したいけど、git config user.name/user.emailはそこに記載したくない。
ということで、gitconfigのincludeを使って別ファイルにしました。

Gitで管理する.gitconfigには

[include]
  path = ~/.gitconfig.local

としておいて、dotfileの展開スクリプト内で

GIT_CONFIG_LOCAL=~/.gitconfig.local
if [ ! -e $GIT_CONFIG_LOCAL ]; then
  echo -n "git config user.email?> "
  read GIT_AUTHOR_EMAIL

  echo -n "git config user.name?> "
  read GIT_AUTHOR_NAME

  cat < $GIT_CONFIG_LOCAL
[user]
  name = $GIT_AUTHOR_NAME
  email = $GIT_AUTHOR_EMAIL
EOF
fi

とすることで、展開スクリプト実行中にプロンプトを出して、user.name/user.emailを入力させました。

実際のdotfileの展開スクリプト

参考