There are two issues with your command:
bash -i starts an interactive shell session, and you can't use watch with an interactive command. This is why you get the "Stopped" message. If you had run this from a zsh shell, it would additionally have said suspended (tty output). - Aliases are not inherited by child processes, which means that your
k alias in your shell won't be visible inside the shell you "watch".
Instead:
watch -x bash -c 'kubectl get pods; echo; kubectl get svc'
or,
watch 'kubectl get pods; echo; kubectl get svc'
This does not run an interactive bash shell with watch, and it does not try to use an alias that isn't defined.
If your point with running an interactive shell is to have aliases expanded, then use bash with its expand_aliases shell option instead:
watch -x bash -O expand_aliases -c $'alias k=kubectl\nk get pods; echo; k get svc'
Note that I have to define the alias inside the inline script and that I also have to insert a literal newline after the alias definition (you can't use an alias on the same line that you define it on). I do this by letting the command string be a C string ($'...') and then adding the newline with \n. You could also insert a literal newline in the command string like this:
watch -x bash -O expand_aliases -c 'alias k=kubectl k get pods; echo; k get svc'
watchcommand itself. I'd recommend skipping the aliases until you getwatchcommand working, just to follow KISS principle.