超越しようdocker ps
とするdocker ps --format="table {{.ID}} {{.Image}} {{.Status}}"
私は読んだこの問題と参照文書がありますが、正しく動作しません。
私はいくつかの「コンパイル」アプローチを試しましたが、これは最新の試みです。
alias func='dockerps'
function dockerps() {
'docker ps'='docker ps --format="table {{.ID}} {{.Image}} {{.Status}}"'$\
}
docker ps
入力時に書式が維持されるようにコードを変更するにはどうすればよいですか?
ベストアンサー1
複数の単語で構成されるエイリアスのようなものはありません。あなたが言及したSOの答えは私にとって完全に間違っているようです。それは言葉ではなく、zshの歴史4.3を掘り下げても、あなたが望む効果に近いものを生成する関数の痕跡を見つけることができません(zsh An開発バージョンにあった可能性がある実験的機能)は、5.0リリース以前に削除されました。作成した内容は明確に定義された意味を持ちます。エイリアスfunc
と呼ばれる関数を定義するので、最初の単語がコマンドラインdockerps
またはインコマンドラインでのみ機能します。関数が呼び出されると、無効な名前で変数を設定しようとしますが、失敗します。func
dockerps
Zshを使用すると、特殊文字を含む単語のエイリアスを定義できます。
darkstar% alias "'docker ps'"='echo docker ps in single quotes'
darkstar% alias 'docker\ ps'='echo docker backslash ps'
darkstar% 'docker ps'
docker ps in single quotes
darkstar% docker\ ps
docker backslash ps
darkstar% "docker ps"
zsh: command not found: docker ps
しかし、特に役に立ちません。'docker ps'
一つの言葉ではなくdocker ps
二つの言葉です。
一般的な方法で行う必要があります。つまりdocker
、という関数を定義し、その引数を分析するようにします。これはグローバルオプションをサポートする単純なバージョンですが、パラメータを持つグローバルオプションの--option=value
代わりに使用する必要があります--option value
。
docker () {
setopt local_options extended_glob unset
local -i i=$argv[(i)^-*]
# $argv[i] is the first non-option argument (or empty if there is none).
# See if we want to insert something after it.
case $argv[i] in
ps) argv[i+1,i]=(--format="table {{.ID}} {{.Image}} {{.Status}}");;
esac
command docker "$@"
}