watch
エイリアスを含むコマンドを実行すると、エイリアスは拡張されません。実際、次のエイリアスを提供する一重引用符と二重引用符を使用してみました。
# alias ll
alias ll='ls -l --color=tty'
次のコマンドは失敗します
# watch ll
sh: ll: command not found
この場合、コマンドライン拡張は機能しませんか?
答え1
エイリアスは、最初の引数にのみ拡張されるか、コマンドの末尾に末尾のスペースがある別のエイリアスの後に拡張されます。
送信者:bash
help alias
エイリアスを展開するときにVALUEの後にスペースがある場合は、次の単語にエイリアス置換があるかどうかが確認されます。
これを行うには、以下を試してください。
alias watch='watch '
alias ll='ls -l --color=tty'
watch ll
一部のバージョンではストリップの色がデフォルトで設定されており、watch
一部のバージョンではまたはを使用して停止できます。--color
-G
答え2
時計がエイリアスを表示する前にエイリアスを手動で拡張できますか?
watch $(alias ll | cut -d\' -f2)
説明する
出力はalias ll
次のとおりです。
$ alias ll
alias ll='ls -lAGh'
したがって、カットの区切り文字を一重引用符に設定し、2番目のフィールドを切り取り、次のように残します。
ls -lAGh
つまり、拡張のエイリアスです。それこれにより、与えられた引数が形成されますwatch
。
これを行う関数を作成します。
function watcha {
watch $(alias "$@" | cut -d\' -f2)
}
次に、
watcha ll
期待どおりに動作します。これは迷惑であり、あらゆる状況で失敗します。申し訳ありません。
答え3
私が使用するもう一つのトリック(特にaliases kubectl
)は、k
エイリアスの代わりにシンボリックリンクを作成することです。これにより、シンボリックリンクを見つけることができ、watch
なりすましは必要ありません。
これの欠点は、使用したいすべてのエイリアスに対してこれを行う必要があり、シェル組み込みに対してどのように機能するのかわかりません。
答え4
これは、その--color
オプションを使用し、パラメーターを使用して更新-n
間隔を指定するオプションです。
swatch_usage() {
cat <<EOF >&2
NAME
swatch - execute a program periodically with "watch". Supports aliases.
SYNOPSIS
swatch [options] command
OPTIONS
-n, --interval seconds (default: 1)
Specify update interval. The command will not allow quicker than
0.1 second interval.
EOF
}
swatch() {
if [ $# -eq 0 ]; then
swatch_usage
return 1
fi
seconds=1
case "$1" in
-n)
seconds="$2"
args=${*:3}
;;
-h)
swatch_usage
return 1
;;
*)
seconds=1
args=${*:1}
;;
esac
watch --color -n "$seconds" --exec bash -ic "$args || true"
}
色と時間のサポートが必要なだけですが、必要に応じてさらに追加できると確信しています。
この機能の鍵は、対話型モードで bash を使用してコマンドを直接実行するため、通常は bash で使用可能なすべてのエイリアスまたはコマンドを使用できることです。
私はスクリプトの経験がないので公平な警告です。お客様のマイルが異なる場合があります。たまにCtrl+をC数回押すと止まる時もありますが、それにもかかわらず6ヶ月間何の問題もなく頻繁に使用しています。
ポイントフォーマット:https://gist.github.com/ablacklama/550420c597f9599cf804d57dd6aad131