![명령을 연결하는 방법](https://linux55.com/image/214268/%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%97%B0%EA%B2%B0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
하나의 출력이 다른 명령의 입력이 되도록 명령을 연결하는 방법은 무엇입니까?
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