127

bashスクリプトで次のさまざまな形式を試しました:

#!/bin/bash
svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"

COLUMNSしかし、環境変数を正しく展開するための構文を取得できません。

次のさまざまな形式を試しました。

svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W $COLUMNS'

svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W ${COLUMNS}'

eval svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"

提案?

4

5 に答える 5

20

不明な場合は、端末で「cols」リクエストを使用して、COLUMNS を忘れてください。

COLS=$(tput cols)
于 2009-05-09T19:45:21.417 に答える
15

次の点に注意してくださいCOLUMNS

  1. 環境変数ではありません。これは、bash 自体によって設定される通常の bash パラメーターです。
  2. 信号を受信すると自動的に設定されますSIGWINCH

この 2 番目の点は、通常、変数がbash スクリプトではなく、インタラクティブシェルCOLUMNSでのみ設定されることを意味します。

スクリプトstdinが端末に接続されている場合は、端末に次のように尋ねることで、端末の幅を手動で調べることができます。

tput cols

これを SVN コマンドで使用するには、次のようにします。

svn diff "$@" --diff-cmd /usr/bin/diff -x "-y -w -p -W $(tput cols)"

(注:引用 "$@"して近づかないようにしてくださいeval;-))

于 2009-05-11T07:30:50.073 に答える
2

次のスクリプトは、 の複数の値に対して機能します$COLUMNSCOLUMNSこの呼び出しの前に設定していないのだろうか?

#!/bin/bash
COLUMNS=30
svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"

スクリプト内でエコー$COLUMNSして、正しく設定されているかどうかを確認できますか?

于 2009-05-08T16:29:08.403 に答える
0

あなたはそれを正しくやっているので、他の何かが間違っていると思います(COLUMNSをエクスポートしていませんか?)。

これらのケースをデバッグするための秘訣は、特殊なコマンド(プログラミング言語の人のためのクロージャー)を作成することです。次のようにして、diff-columnsという名前のシェルスクリプトを作成します。

exec /usr/bin/diff -x -y -w -p -W "$COLUMNS" "$@"

使用するだけです

svn diff "$@" --diff-cmd  diff-columns

このようにして、コードは読みやすく、よりモジュール化され(トップダウンアプローチ)、diff-columnsコードを完全に個別にテストできます(ボトムアップアプローチ)。

于 2009-05-09T08:04:56.627 に答える