답변1
일반적인 아이디어는 다음과 같은 *
결과를 뒤집는 것일 수 있습니다.
printf '%s\n' * | tac
이것을 사용하여 xargs
생성합니다 vim
. 이에 대한 두 가지 문제점:
일반적으로 파일 이름에는 개행 문자가 포함될 수 있으므로 null 문자로 구분하고
xargs -0
.vim
xargs
파이프에서 생성된 입력은 터미널에서 나오지 않는다고 불평합니다. 이상한 일이 일어날 수도 있습니다.xargs
지원하는 경우-o
(/dev/tty
명령을 실행하기 전에 하위 프로세스에서 stdin을 다시 여는 경우) 이를 사용하십시오.
그러면 전체 솔루션은 다음과 같습니다.
printf '%s\0' * | tac -s "" | xargs -0o vim
노트:
tac
POSIX에서는 필요하지 않습니다.xargs
사용된 옵션을 지원하지 않을 수 있습니다. 전체 접근 방식은 이식성이 없습니다.- 옵션 인수인 빈 문자열은
tac -s
널 문자를 명시적으로 전달하지 않고 구분 기호로 널 문자를 설정하는 것으로 보입니다(문제가 있을 수 있음). - 있다
ARG_MAX
한계, 더 긴 명령을 실행할 수 없습니다. 파일이 많은 경우 확장이*
제한을 초과하여Argument list too long
.printf
쉘에 내장된 경우 이 시점에서는 제한이 적용되지 않을 수 있습니다. 여전히xargs
스폰을 시도할 때 적용됩니다vim
.xargs
이를 감지하고vim
필요한 경우 두 개 이상의 프로세스를 순서대로 실행합니다. 그러나 이는 원하는 것이 아닐 수도 있습니다. 를 사용하여 수동으로 반복할 예정이므로:n
파일 수가 그다지 크지 않을 것으로 예상하므로ARG_MAX
문제가 되지 않을 것입니다.