1

誤ってキャップロックをオンにして、大文字と小文字を区別するツールを実行しようとしているときに問題を修正する便利な機能を作成しようとしています。

MAKE DEBUGたとえば、ときどきの代わりにタイプしていることがありmake debugます。

私が今持っているものは非常に簡単ですalias MAKE="make".makefileを編集してルールを複製しますDEBUG: debug.

関連するツールを変更することなく、引数で機能するソリューションを希望します。

4

5 に答える 5

2

GNUsedを使用する

makefile内のすべてを小文字にしたい場合は、GNUsedを使用して全体を小文字にすることができます。

sed -i 's/.*/\L&/' Makefile

もう少し識別力のあるsedスクリプトを作成することもできますが、\L置換エスケープはあなたの友達です。

trを使用する

質問にtrのタグを付けたので、trソリューションも必要になる場合があります。trはインプレース変換を行わないため、少し面倒ですが、一時ファイルをシャッフルしたり、moreutilsのスポンジを使用したりできます。例えば:

tr '[[:upper:]]' '[[:lower:]]' < Makefile | sponge Makefile
于 2012-06-22T23:57:51.550 に答える
1

これにはスクリプトが含まれますが、以前の試みの Ctrl-D 問題を回避します。

コマンドごとに、次のようなエイリアス

alias MAKE="casefixer make"

そして、私が作成した次のファイル/usr/local/bin/casefixer:

#!/bin/bash
command=`echo $1 | tr '[:upper:]' '[:lower:]'`       # convert 1st arg to lowercase, it's the command to invoke
shift                                                # remove 1st arg from $*
$command `echo "$*" | tr '[:upper:]' '[:lower:]'`    # convert arguments to lowercase, and invoke the command with them
于 2012-06-22T22:39:28.867 に答える
1

@Clayton Hughesのcasefixerソリューションで遊んで、引数のスペースなどの面白いものを処理するソリューションを次に示します(これは$*混乱します):

casefixer() { eval "$(printf "%q " "$@" | tr '[:upper:]' '[:lower:]')"; }
alias MAKE='casefixer make'

注:はかなり危険なことであり、非常に奇妙なバグevalを引き起こすことで定評があります。ただし、この場合、コマンドとその引数を二重引用符で囲み、%q でエンコードすると、問題回避できます。少なくとも、想定外の動作をしたケースは見つかりませんでした。

于 2012-06-23T03:14:04.700 に答える
0

完全ではありませんが、ここに 1 つの解決策があります。

alias MAKE="make `tr '[:upper:]' '[:lower:]`"

それは機能しますが、実行を開始する前に Ctrl-D を押して EOF を送信する必要があるという不幸な問題があります。

于 2012-06-22T22:34:03.860 に答える
0

コマンド " downcase readline-word" (M-uデフォルトでバインドされている) は、ここで言及する価値があります。「MAKE DEBUG」と入力したとします。リターンを押す前にキャッチすると、 でカーソルを行頭に移動できますC-a。(それ以外の場合は、上向き矢印を使用してコマンドを最初に戻します)。その後、 を押すたびM-uに、カーソルの直後の単語が小文字に変更され、カーソルが次の単語の先頭に移動します。

少し面倒ですし、行全体を一度に小文字にする方法がわかりません。おそらく誰かがこれを改善できるでしょう。

于 2012-06-22T23:13:38.257 に答える