파이프를 사용하여 표현식을 보는 방법은 무엇입니까?

파이프를 사용하여 표현식을 보는 방법은 무엇입니까?

나는 오늘 멋진 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'

관련 정보