watch
concatena seus argumentos de linha de comando, juntando-os com espaços e passa o resultado como uma string para sh -c
. Portanto, watch ls -l "foo bar"
se torna igual a watch ls -l foo bar
e você tem um problema semelhante com squeue
. Você tem duas escolhas:
-
Adicione aspas explícitas para o shell que
watch
inicia. Como você realmente fez no último exemplo. É só que quando o seu alias se expande, as aspas duplas não são citadas. As aspas externas apenas citam o alias quando ele é definido. Eles não agem na linha de comando quando o alias é expandido.Então, qualquer um destes:
watch squeue -o '"%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %V %S %Z"' watch squeue -o \"%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %V %S %Z\" alias watch='watch ' alias sq='squeue -o \"%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %V %S %Z\"' watch sq alias sq=\''squeue -o "%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %V %S %Z"'\' watch sq
OBSERVAÇÃO: Você pode usar
set -x
e executarwatch >/dev/null
para ver o comando que o shell realmente executa, você verá lá se as aspas forem repassadas parawatch
. -
Diga
watch
para pular o shell e executar o comando diretamente. Dessa forma, os argumentos da linha de comando separados permanecem separados. Página do manual :-x
,--exec
Pass command toexec(2)
instead ofsh -c
which reduces the need to use extra quoting to get the desired effect.watch -x squeue -o "%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %V %S %Z" alias watchx='watch -x ' alias sq='squeue -o "%.18i %.9P %.8j %.8u %.216t %.10M %.6D %R %V %S %Z"' watchx sq