나는 오늘 멋진 shuf 명령을 배웠습니다.
ls | shuf
작업 디렉터리 목록이 표시되지만 다른 명령으로 이 파이프라인 명령 표현식을 실행할 때마다 shuf 덕분에 가능합니다.
그래서 이 표현을 1초마다 반복하면 어떨까 하는 생각이 들어서 시도해 보았습니다.
watch -n1 ls | shuf (and got no output)
watch -n1 (ls | shuf) (and got an error)
watch -n1 {ls | shuf} (and got an error)
그런 다음 ls | shuf를 자체 파일에 넣고 그것으로 foo 스크립트를 만들었습니다.
watch -n1 ./foo (this times it worked)
표현식을 스크립트 파일로 만들지 않고도 파이프라인 명령 표현식에 watch 명령을 적용할 수 있습니까?
답변1
watch 명령에는 여러 가지 변형이 있으며 그 중 일부는 전달된 인수 watch
(중간 공백 문자 포함)에서 연결된 명령줄을 해석하는 셸을 생성합니다. 할 수 있는 작업은 다음과 같습니다.
watch 'ls | shuf'
그것은 다음과 같습니다:
watch ls '|' shuf
watch
( 실제로 실행되는 것 : "/bin/sh", ["sh", "-c", "ls | shuf"]
두 번째 수준 해석이 예상치 못한 버그 및 보안 문제의 문을 열 수 있기 때문에 매우 위험합니다. procps-ng의 감시는 -x
이 옵션을 사용하여 이 동작을 피할 수 있습니다).
첫 번째 인수에 지정된 이름으로만 명령을 실행하고 모든 인수를 인수로 사용하는 것도 있습니다. 안에:
watch sh -c 'ls | shuf'