이 질문은 이전에도 분명 제기된 질문인 것으로 알고 있으며, 정확히 무엇을 검색하고 있는지 잘 모르겠으니 중복된 질문인 점 양해 부탁드립니다.
이전 명령에서 입력을 파이프할 때 변수를 올바른 위치로 "풀"하려면 어떻게 해야 합니까? PID를 찾고 해당 PID와 관련된 열린 파일을 찾은 다음 파일로 범위를 좁힌 다음 해당 파일에 대해 명령을 실행하려고 합니다. 이것은 명령입니다:
ps x | grep IINA | grep -v grep | awk '{print $1}'
좋아, 이것은 나에게 PID를 제공합니다. 좋습니다. 이제 나는 lsof -p
그 PID를 원하지만 단순히 이것을 할 수는 없습니다 ps x | grep IINA | grep -v grep | awk '{print $1}' | lsof -p
.
그렇지 않다면 ps x | grep IINA | grep -v grep | lsof -p 'awk '{print $1}''
(잘못된 역따옴표를 다시 한 번 양해해 주시기 바랍니다), 내가 원하는 것을 어떻게 할 수 있습니까?
답변1
이 lsof
유틸리티에는 표준 입력이 아닌 명령줄에 PID가 필요합니다.
당신은 그것을 사용할 수 있습니다
lsof -p "$( pgrep IINA )"
이는 인수로 실행되며 해당 출력은 명령 대체를 사용하여 옵션에 대한 옵션 인수로 전달 pgrep
됩니다 .IINA
lsof
-p
IINA
명령 이름이 아니고 프로세스를 시작하는 데 사용되는 명령줄의 일부인 경우 -f
플래그를 pgrep
.
여러 히트를 얻은 경우 구현에서 이를 지원하는 경우 (가장 최근에 시작된 일치 프로세스 가져오기) 또는 (가장 오래된 일치 프로세스 가져오기)를 pgrep
사용 하거나 다음을 사용할 수 있습니다.-n
-o
pgrep
lsof -p "$( pgrep IINA | tr '\n' ',' )"
쉼표로 구분된 PID 목록을 만듭니다 lsof -p
.