bashrcのエイリアス空間

bashrcのエイリアス空間

バッシュを使う

1行にスペースで区切ってドッカーIDのみを印刷するコマンドを作成しました。

docker ps -a | grep -E '^[a-z0-9]{12}' -o | awk '{printf "%s ",$0} END {print ""}'

それはうまくいったので、エイリアスにすることにしました。

まずここでは空白が"%s "問題のようで省略することにしました。

新しいコマンドは次のとおりです。

docker ps -a | grep -E '^[a-z0-9]{12}' -o | awk '{printf "%s\ ",$0} END {print""}'

エラーなしで.bashrcを取得しましたが、エイリアスを実行しようとすると、次のエラーが発生します。

{printf %s ,-bash} END {print}
        ^ syntax error

私はこれを見たことがある魚:エイリアスのスペースしかし、私は魚を使用していません

編集してください。私のエイリアスは次のとおりです。

alias dockerid="docker ps -a | grep -E '^[a-z0-9]{12}' -o | awk '{printf "%s\ ",$0} END {print""}'"

一重引用符を使用すると、sourceコマンドは失敗します。

答え1

だからこそbashマニュアルによると:

ほとんどすべての目的で、シェル関数はエイリアスより優れています。

dockerid() {
    docker ps -a \
    | grep -o -E '^[a-z0-9]{12}' \
    | awk '{printf "%s ",$0} END {print ""}'
}

エイリアス参照地獄は次awkの代わりに消えますが、paste

alias dockerid="docker ps -a | grep -o -E '^[a-z0-9]{12}' | paste -d ' ' -s"

答え2

使用に加えて、以下をdocker ps -a | grep -E '^[a-z0-9]{12} -o | ...'使用することもできます。

docker ps -a --format '{{.ID}}' | xargs

またはエイリアスを使用してください(私は関数を好む)

alias dockerid='docker ps -a --format "{{.ID}}" | xargs'

答え3

問題は、引用符付き文字列があること"です"。質問が示すように(構文の強調表示を参照)、最初の内部エントリは"endと見なされます"。したがって、\次のように内部引用符をエスケープし、内部引用符もエスケープする必要があります。

alias dockerid="docker ps -a | grep -E '^[a-z0-9]{12}' -o | awk '{printf \"%s\\ \",$0} END {print \"\"}'"

答え4

問題は、エイリアスを呼び出すときに実行したいコマンド全体を囲むために一重引用符( ')を使用していますが、コマンド自体にも一重引用符を使用していることです。これにより、シェルはコマンドの一重引用符を実行する必要があるコマンドの一部ではなく、エイリアス定義の一部として解釈します。

この問題を解決するには、コマンド全体を一重引用符ではなく二重引用符( ")で囲むことができます。これにより、シェルはコマンド内の一重引用符をエイリアス定義の一部ではなくコマンド自体の一部として解釈できます。

alias dockerid="docker ps -a | grep -E '^[a-z0-9]{12}' -o | awk '{printf "%s\ ",$0} END {print\"\"}'"

これはあなたの状況に適しているはずです。

関連情報