エイリアスがウォッチステートメントで拡張されるように、このエイリアスを作成しました。
> alias w='watch -x bash -i -c'
> alias k=kubectl
私はそれを実行します:
> w 'k get pods; echo; k get svc'
2秒後に私は次を見る:
[2]+ Stopped watch -x bash -i -c 'k get pods; echo; k get svc'
watchコマンドが停止しました。
watchコマンドが停止するのはなぜですか?
バージョン:Bash 5.1.16。 Ubuntu 22.04。
答え1
コマンドには2つの問題があります。
bash -i
対話型シェルセッションを開始し、watch
対話型コマンドと一緒に使用することはできません。これが「停止しました」というメッセージが表示される理由です。シェルでこのコマンドを実行すると、zsh
このコマンドも表示されますsuspended (tty output)
。- エイリアスは子プロセスによって継承されません。つまり、
k
シェルのエイリアスは、「監視」しているシェルには表示されません。
代わりに:
watch -x bash -c 'kubectl get pods; echo; kubectl get svc'
または、
watch 'kubectl get pods; echo; kubectl get svc'
bash
を使用して対話型シェルを実行せず、watch
未定義のエイリアスを使用しようとしません。
エイリアスを拡張するために対話型シェルを実行している場合は、適切bash
なexpand_aliases
シェルオプションを使用してください。
watch -x bash -O expand_aliases -c $'alias k=kubectl\nk get pods; echo; k get svc'
インラインスクリプトでエイリアスを定義し、エイリアス定義の後にリテラル改行を挿入する必要があります(エイリアスが定義されているのと同じ行ではエイリアスを使用できません)。私はコマンド文字列をC文字列()で作成し、改行文字を追加して$'...'
これを達成しました\n
。次のようにコマンド文字列にリテラル改行を挿入することもできます。
watch -x bash -O expand_aliases -c 'alias k=kubectl
k get pods; echo; k get svc'