내 문제는 다음과 비슷합니다여기에서 문제를 확인하세요.하지만 반전이 있습니다. 따옴표를 사용해야 하는데 별칭 watch에 의해 제거된 것 같습니다.
사용자 정의 slurm squeue 명령으로 watch를 실행하고 싶습니다.
$alias squeue_personal='squeue -o "%.18i %.9P %.8j %.8u %.216t %.10M %.6D %R %V %S %Z"'
$alias watch='watch '
노트: 다른 시계 질문에 따르면
하지만 여전히 작동하지 않습니다. 별칭 감시는 따옴표를 제거하기 때문에:
Every 2.0s: squeue -o %.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %V %S %Z Fri Jul 6 12:06:57 2018
squeue: error: Unrecognized option: %.9P
Usage: squeue [-A account] [--clusters names] [-i seconds] [--job jobid]
[-n name] [-o format] [-p partitions] [--qos qos]
[--reservation reservation] [--sort fields] [--start]
[--step step_id] [-t states] [-u user_name] [--usage]
[-L licenses] [-w nodes] [-ahjlrsv]
별칭을 사용하지 않으면 모든 것이 정상입니다. 예를 들어 다음과 같이 작동합니다.
$watch 'squeue -o "%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %V %S %Z"'
해결책은 작은 변화라고 확신합니다또 다른 시청 질문그러나 나는 그것이 무엇인지 모른다.
답변1
watch
명령줄 인수를 연결하고 공백으로 연결한 다음 결과를 문자열로 에 전달합니다 sh -c
. 따라서 watch ls -l "foo bar"
와 동일해 watch ls -l foo bar
지며 비슷한 문제가 발생합니다 squeue
. 두 가지 옵션이 있습니다:
시작된 쉘에 대해 명시적인 따옴표를 추가합니다
watch
. 이전 예에서 실제로 그랬던 것처럼. 별칭이 확장되면 큰따옴표가 인용되지 않습니다. 외부 인용문은 별칭이 정의된 경우에만 인용합니다. 별칭이 확장되면 명령줄에는 아무런 영향을 주지 않습니다.따라서 다음 중 하나:
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
노트:사용
set -x
하고 실행하면watch >/dev/null
쉘이 실제로 실행되는 명령을 확인할 수 있으며 따옴표가 실제로watch
.watch
셸을 건너뛰고 명령을 직접 실행하도록 지시합니다 . 이렇게 하면 개별 명령줄 매개변수가 독립적으로 유지됩니다.매뉴얼 페이지:-x
, 대신 원하는 효과를 얻기 위해 추가 참조를 사용할 필요성을 줄이기 위해--exec
명령을 전달합니다 .exec(2)
sh -c
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