我创建了这个别名,以便别名在监视语句中得到扩展。
> alias w='watch -x bash -i -c'
> alias k=kubectl
我执行它:
> w 'k get pods; echo; k get svc'
两秒钟后我看到:
[2]+ Stopped watch -x bash -i -c 'k get pods; echo; k get svc'
手表命令停止了。
为什么 watch 命令会停止?
版本:Bash 5.1.16。乌班图22.04。
答案1
您的命令有两个问题:
bash -i
启动交互式 shell 会话,并且不能watch
与交互式命令一起使用。这就是您收到“已停止”消息的原因。如果您从 shell 运行此命令zsh
,它还会显示suspended (tty output)
.- 别名不会被子进程继承,这意味着
k
shell 中的别名在您“监视”的 shell 中不可见。
反而:
watch -x bash -c 'kubectl get pods; echo; kubectl get svc'
或者,
watch 'kubectl get pods; echo; kubectl get svc'
这不会运行bash
带有 的交互式 shell watch
,并且不会尝试使用未定义的别名。
如果您运行交互式 shell 的目的是扩展别名,则使用bash
其expand_aliases
shell 选项:
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'