ウォッチコマンドエイリアス展開


67

watchエイリアスを含むコマンドを実行すると、エイリアスは展開されません。実際、次のエイリアスを指定して、一重引用符と二重引用符の両方を試しました:

# alias ll
alias ll='ls -l --color=tty'

次のコマンドは失敗します

# watch ll
sh: ll: command not found

この場合、コマンドライン拡張は機能しませんか?

回答:


98

エイリアスは、最初の引数として、またはコマンドの末尾にスペースが続く別のエイリアスの後にのみ展開されます。

以下からbashhelp alias

VALUEの末尾にスペースがあると、エイリアスが展開されたときに次の単語のエイリアス置換がチェックされます。

これを行うには、次を試してください。

alias watch='watch '
alias ll='ls -l --color=tty'
watch ll

watchストリップカラーの一部のバージョンはデフォルトで、一部のバージョンでは--colorまたはを使用して停止できることに注意してください-G


1
これは絶対に素晴らしい答えです!ありがとう、もちろん+1。
ztank1013

1
ありがとう...この間ずっと、私は1. llと入力し、2。ctrl + alt + eを押し、3。watchのプレフィックスを付けていました。これは時間の節約になります。
-anishsane

10
残念ながら、このメソッドにはwatch、エイリアスを次の単語にwatchする必要があるため、オプションを提供できないという制限がありますが、コマンドを実行する前に引数が必要です。試した場合watch -n 10 <alias>、bashはエイリアスを展開しません。この問題を回避するには、必要なオプションを含むエイリアス(例: `alias watch-10 = 'watch -n 10')が必要ですが、末尾にはスペースが必要です。
-indiv

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

必要に応じて動作します。これはひどく、あらゆる状況で失敗します。ごめんなさい。


0

私はここで基本的な問題は実行中にあると考えましたwatch、引数は " sh -c"に与えられます。つまりllsh(dash shell's)環境でエイリアスが定義されていない場合、それは展開されません。しかし、私は間違っていました、そして、これはそうではありません、上のクリスの答えは正しいです。


2
ではない正確に。試してみてくださいwatch 'alias ll="ls -l --color=tty"; type ll; ll'
クリスダウン

確認のための即時対応のために+1。上記は間違っていました。
サチンディヴェカー

@ChrisDown。したがって、ウォッチで「sh -c」を使用している場合でも、説明は適用可能ですsh。私は正しいですか?
サチンディベカー

1
それはどのシェルがとして使用されているかに依存しshます。これは、ことに注意作業を:sh -c $'alias ll="ls -l --color=tty"\ntype ll\nll'
クリス・ダウン

0

watchエイリアスを展開する新しいインタラクティブシェルを実行します。

watch -x bash -i -c ll

(ザ・が-x停止することを意図しているwatch、それは自分のだ使用してからsh -c私たちの与えられたコマンドをラップする。我々は、我々が通過する必要があるためということ望んでいない-ishbash、それの.bashrcを読み込んで、別名を定義する対話型シェル、作るために。で-x、時計が実行されますexecを使用したコマンド。)

ああ、実際、これは機能しません。「ll」の出力を一度表示してから2秒間スリープすると、ジョブはバックグラウンドになりますが、少し謎めいています。

1]+  Stopped                 watch -x bash -i -c ll

なぜ止まったのですか?オープンブレースはどこに[行きましたか?くそー、これは素晴らしい答えだと思ったが、うまく動かせない。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.