誤ってキャップロックをオンにして、大文字と小文字を区別するツールを実行しようとしているときに問題を修正する便利な機能を作成しようとしています。
MAKE DEBUG
たとえば、ときどきの代わりにタイプしていることがありmake debug
ます。
私が今持っているものは非常に簡単ですalias MAKE="make"
.makefileを編集してルールを複製しますDEBUG: debug
.
関連するツールを変更することなく、引数で機能するソリューションを希望します。
誤ってキャップロックをオンにして、大文字と小文字を区別するツールを実行しようとしているときに問題を修正する便利な機能を作成しようとしています。
MAKE DEBUG
たとえば、ときどきの代わりにタイプしていることがありmake debug
ます。
私が今持っているものは非常に簡単ですalias MAKE="make"
.makefileを編集してルールを複製しますDEBUG: debug
.
関連するツールを変更することなく、引数で機能するソリューションを希望します。
makefile内のすべてを小文字にしたい場合は、GNUsedを使用して全体を小文字にすることができます。
sed -i 's/.*/\L&/' Makefile
もう少し識別力のあるsedスクリプトを作成することもできますが、\L置換エスケープはあなたの友達です。
質問にtrのタグを付けたので、trソリューションも必要になる場合があります。trはインプレース変換を行わないため、少し面倒ですが、一時ファイルをシャッフルしたり、moreutilsのスポンジを使用したりできます。例えば:
tr '[[:upper:]]' '[[:lower:]]' < Makefile | sponge Makefile
これにはスクリプトが含まれますが、以前の試みの 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
@Clayton Hughesのcasefixer
ソリューションで遊んで、引数のスペースなどの面白いものを処理するソリューションを次に示します(これは$*
混乱します):
casefixer() { eval "$(printf "%q " "$@" | tr '[:upper:]' '[:lower:]')"; }
alias MAKE='casefixer make'
注:はかなり危険なことであり、非常に奇妙なバグeval
を引き起こすことで定評があります。ただし、この場合、コマンドとその引数を二重引用符で囲み、%q でエンコードすると、問題を回避できます。少なくとも、想定外の動作をしたケースは見つかりませんでした。
完全ではありませんが、ここに 1 つの解決策があります。
alias MAKE="make `tr '[:upper:]' '[:lower:]`"
それは機能しますが、実行を開始する前に Ctrl-D を押して EOF を送信する必要があるという不幸な問題があります。
コマンド " downcase readline
-word" (M-u
デフォルトでバインドされている) は、ここで言及する価値があります。「MAKE DEBUG」と入力したとします。リターンを押す前にキャッチすると、 でカーソルを行頭に移動できますC-a
。(それ以外の場合は、上向き矢印を使用してコマンドを最初に戻します)。その後、 を押すたびM-u
に、カーソルの直後の単語が小文字に変更され、カーソルが次の単語の先頭に移動します。
少し面倒ですし、行全体を一度に小文字にする方法がわかりません。おそらく誰かがこれを改善できるでしょう。