回答:
エイリアスは、最初の引数として、またはコマンドの末尾にスペースが続く別のエイリアスの後にのみ展開されます。
以下からbash
のhelp alias
:
VALUEの末尾にスペースがあると、エイリアスが展開されたときに次の単語のエイリアス置換がチェックされます。
これを行うには、次を試してください。
alias watch='watch '
alias ll='ls -l --color=tty'
watch ll
watch
ストリップカラーの一部のバージョンはデフォルトで、一部のバージョンでは--color
またはを使用して停止できることに注意してください-G
。
watch
、エイリアスを次の単語にwatch
する必要があるため、オプションを提供できないという制限がありますが、コマンドを実行する前に引数が必要です。試した場合watch -n 10 <alias>
、bashはエイリアスを展開しません。この問題を回避するには、必要なオプションを含むエイリアス(例: `alias watch-10 = 'watch -n 10')が必要ですが、末尾にはスペースが必要です。
たぶん、ウォッチがそれを見る前にエイリアスを手動で展開できますか?
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
必要に応じて動作します。これはひどく、あらゆる状況で失敗します。ごめんなさい。
私はここで基本的な問題は実行中にあると考えましたwatch
、引数は " sh -c
"に与えられます。つまりll
、sh(dash shell's)
環境でエイリアスが定義されていない場合、それは展開されません。しかし、私は間違っていました、そして、これはそうではありません、上のクリスの答えは正しいです。
watch 'alias ll="ls -l --color=tty"; type ll; ll'
。
sh -c
」を使用している場合でも、説明は適用可能ですsh
。私は正しいですか?
sh
ます。これは、ことに注意し作業を:sh -c $'alias ll="ls -l --color=tty"\ntype ll\nll'
watch
エイリアスを展開する新しいインタラクティブシェルを実行します。
watch -x bash -i -c ll
(ザ・が-x
停止することを意図しているwatch
、それは自分のだ使用してからsh -c
私たちの与えられたコマンドをラップする。我々は、我々が通過する必要があるためということ望んでいない-i
にsh
かbash
、それの.bashrcを読み込んで、別名を定義する対話型シェル、作るために。で-x
、時計が実行されますexecを使用したコマンド。)
ああ、実際、これは機能しません。「ll」の出力を一度表示してから2秒間スリープすると、ジョブはバックグラウンドになりますが、少し謎めいています。
1]+ Stopped watch -x bash -i -c ll
なぜ止まったのですか?オープンブレースはどこに[
行きましたか?くそー、これは素晴らしい答えだと思ったが、うまく動かせない。