명령을 연결하는 방법

명령을 연결하는 방법

하나의 출력이 다른 명령의 입력이 되도록 명령을 연결하는 방법은 무엇입니까?

basename | dirname /dev/null

예상 출력:

dev

실제 출력:

usage: basename string [suffix]
       basename [-a] [-s suffix] string [...]
/dev

또한 다음을 시도했지만 그 중 하나도 작동하지 않았습니다.

dirname /dev/null | basename

답변1

그것은해야한다:

basename "$(dirname /dev/null)"

임의 파일 경로의 경우 경로 구성 요소가 로 시작하지 않을 것이라는 보장은 없지만 옵션의 끝을 표시하려면 -일부 를 추가해야 합니다 .--

basename -- "$(dirname -- "$file")"

$(...)명령을 실행하고 출력을 수집하여 다른 프로그램에 대한 명령줄 인수로 사용할 수 있습니다.

$(...)삭제 되었으니 참고해주세요모두명령 출력의 후행 줄 바꿈은 위의 예에서 이름이 줄 바꿈으로 끝나는 디렉터리에 대해서는 여전히 작동하지 않습니다. 이 문제를 해결하는 것은 가능하지만 너무 고통스러워서 문제가 무시되는 경우가 많습니다.

zsh 셸에서는 csh 스타일 수정자를 사용하여 t문제가 없는 파일의 ail(basename) 또는 ead(dirname)을 가져올 수 있습니다.h

tail_of_head=$file:h:t

이러한 수정자는 에서도 사용할 수 있지만 csh 또는 zsh와 같은 매개변수 확장이 아닌 기록 확장에만 vim사용할 수 있습니다 .bash

관련 정보