シェルのすべてのコマンドのプレフィックス

シェルのすべてのコマンドのプレフィックス

毎回入力せずにシェルのすべてのコマンドにプレフィックスを追加するにはどうすればよいですか?

マイユースケース1:

$ git init
$ git add -A
$ git commit
$ git push

プレフィックスはgit␣は空白文字です)でなければなりません。

init
add -A
commit
push

マイユースケース2:

sudo docker run my-repo/my-image
sudo docker ps
sudo docker images

接頭辞は次のようになります。sudo docker␣

run my-repo/my-image
ps
images

次のようなことができれば一番いいでしょう。

$ git init
$ use_prefix sudo docker
> ps
> images
> exit
$ sudo docker run my-repo/my-image

答え1

次の機能を使用できます。

use_prefix () {
    while read -ra c; do
        "$@" "${c[@]}"
    done
}

次に、プレフィックスをuse_prefixコマンドの引数として受け入れ、標準入力からプレフィックスを付ける各コマンドを読み取ります。

注:while readループを終了するには、ctrl + cを使用する必要があります。

答え2

使用できますが、xargs十分考慮してガイドラインその使用に関する

xargs -L1 git

次に、etcを1行に1つずつ入力しますinitadd -A

答え3

1つの回避策はエイリアスを設定することですが、組み込みコマンドやシステムバイナリ(たとえば)と競合するときは注意が必要ですps

次の行を追加した後~/.bashrc(次にbashを起動するか、を入力したときに適用されますsource ~/.bashrc):

alias commit='git commit'
alias docker='sudo docker'
alias images='docker images'
alias ps='docker ps'

実際に実行するには、またはをps入力する必要があります。エイリアスをスクリプトで使用できるように特に設定しない限り、これは通常コマンドラインの入力にのみ影響します。command ps\ps

ご提案いただいたようなインタラクティブなシェルインターフェイスの場合は、より多くの参加が必要です。

つまり、@Jesse_Bの良い提案を拡張したのです。

use_prefix () {
    while read -p "$* >" -ra c; do
        [ "${c[0]}" = "exit" ] && break
        "$@" "${c[@]}"
    done
}

キーワードを有効にしexitて通知を追加して、現在やっていることを思い出してください。

答え4

こんにちは。ウェブサイトへようこそ。

この問題を解決するための1つの考えられる解決策は、次のものを使用することです。aliasing

「プレフィックス」を否定しませんが、多くの時間を節約します。

例えば

alias g=git

$ g init
$ g add -A
$ g commit
$ g push

または

単語が複数ある場合は、引用符を使用してください。

alias sd="sudo docker"

sd run my-repo/my-image
sd ps
sd images

ただし、各セッションでこれらのエイリアスをリセットする必要があります。

関連情報