1

テキストを折り返す長い行を管理するためにcore.pagerを設定したいと思います。それを行うために、私はこのコマンドを使用します:

$ GIT_PAGER="fold -sw $COLUMNS" git log

core.pagerを設定しようとしましたが、Bashが$COLUMNSを評価するのが早すぎます。

$ git config core.pager "fold -sw $COLUMNS"
$ grep pager .git/config
    pager = fold -sw 80

$ COLUMNSをエスケープしようとすると、次のようになります。

$ git config core.pager "fold -sw \$COLUMNS"
$ grep pager .git/config
    pager = fold -sw $COLUMNS
$ LC_ALL=en_US git log
fold: option requires an argument -- 'w'
Try 'fold --help' for more information.

使用しようとすると、次のようsh -cになります。

$ git config core.pager 'sh -c fold -sw $COLUMNS'
$ grep pager .git/config
    pager = sh -c fold -sw $COLUMNS

..しかし、$ COLUMNSを正しく評価しません(静的です)。

core.pagerに設定して書いた最初のコマンドと同じ動作をどのように取得できますか?

編集:ニックバスティンが指摘したようgit config core.pager "fold -sw \$COLUMNS"に、うまくいくはずですが、おそらく私は子プロセスに問題があります。

4

2 に答える 2

5

次のような core.pager の設定を解決しました。

$ git config core.pager "fold -sw \$(tput cols)"

Nick Bastin (実際の問題を示した) とこのトピックに感謝します: LINES and COLUMNS environment variables lost in a script

于 2013-03-16T10:57:57.017 に答える
2

したがって、これは特に答えではありませんが、エスケープをテストしました$COLUMNS(質問で行ったように)。シェルで実際にエクスポートされている限り、正常にCOLUMNS機能します(そうでない場合は、上記のように失敗します)。COLUMNSがシェルで定義されていること、および git が環境を失う原因となる何かにエイリアスされていないこと (または にエイリアスされていないこと) は確か--no-pagerですか?

編集:別の環境変数を試してください。変数を書きたいことがたくさんあることCOLUMNSがわかりました.そのうちの1つがあなたを台無しにしている可能性がありますfold. に変更$COLUMNS$FOOてみて、違いがあるかどうかを確認してください。

実際、システムgrepの変数自体$COLUMNSが端末の幅に書き換えられるため、 を使用grepして値を確認すると、値が壊れている可能性があります。

$ export COLUMNS=10
$ echo $COLUMNS
10
$ grep foo
^C
$ echo $COLUMNS
150
于 2013-03-16T09:45:09.433 に答える