Help us understand the problem. What is going on with this article?

ダブルクォートを含むコマンドをそのままaliasにすると失敗しがち

困りごと

gitのオレオレ便利コマンドをgit aliasに設定したら以下のエラーで動かなぁい!

原因と解決法

aliasにダブルクォート使っていたため。シングルクォート(')にするかエスケープ(\")する。
変数展開のタイミングの問題。簡単な詳細(←?)は「シェルのエイリアスで環境変数を使うときはクォーテーションに気をつけよう」という記事を参照

困るまでの具体的な流れ

「git logでいい感じにtreeみたいな。あ、この「git logのオプションと綺麗にツリー表示するためのエイリアス」という記事パクろ。」↓

$ git log --graph --pretty=format:"%C(auto) %h %ad %d %s" --date=format:"%y/%m/%d-%H:%M:%S"
*  XXXXXXX 19/10/30-18:20:09  fix
*    XXXXXXX 19/10/30-11:47:17  Merge pull request #191
|\
| *    XXXXXXX 19/10/30-11:46:52  (origin/mybranch, mybranch) Merge branch 'master' into mybranch
| |\
| |/
|/|
* |  XXXXXXX 19/08/06-10:18:52  update
* |  XXXXXXX 19/06/27-16:05:08  #188
* |  XXXXXXX 19/06/27-16:04:31  #188

「天才きたな。aliasに登録したろ。」↓

~/.gitconfig
[alias]
        tree = log --graph --pretty=format:"%C(auto) %h %ad %d %s" --date=format:"%y/%m/%d-%H:%M:%S"

「やったぜ。打ったろ。」↓

$ git tree
fatal: ambiguous argument '%h': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

「は?すまんもう会社辞めるわ。」
「と思ったけどやっぱ続けるわ。とりあえず(いろいろあってから)シングルクォートにしてみよ」↓

~/.gitconfig
[alias]
        tree = log --graph --pretty=format:'%C(auto) %h %ad %d %s' --date=format:'%y/%m/%d-%H:%M:%S'
$ git tree
*  XXXXXXX 19/10/30-18:20:09  fix
*    XXXXXXX 19/10/30-11:47:17  Merge pull request #191
|\
| *    XXXXXXX 19/10/30-11:46:52  (origin/mybranch, mybranch) Merge branch 'master' into mybranch
| |\
| |/
|/|
* |  XXXXXXX 19/08/06-10:18:52  update
* |  XXXXXXX 19/06/27-16:05:08  #188
* |  XXXXXXX 19/06/27-16:04:31  #188

「いけたわ。変数展開のタイミングに違いありと教えてくれた前述の記事と神と会社に感謝。」

追伸

シングルクォートとダブルクォート併用するときは、ダブルクォートの前に\でエスケープしよう。
またしょっぱい記事を書いてしまった。

TakuTaku04
しがないSIerの歯車。 Webフロントエンドを2016年ごろからやっている。(その前はJava) 泣きながらReact, Vue.js, TypeScript, Node.js, webpackとか使ってる。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away