이라는 파일이 있다고 가정해 보겠습니다. filename123.txt
이 파일은 이름이 지정되어 있으므로 locate
명령을 사용할 수 있습니다 locate filename123
. 이 파일이 반환됩니다.
vi
이제 / 로 열고 싶습니다 vim
. 하지만 해당 위치로 가서 vi
명령과 파일 이름을 입력하고 싶지는 않습니다 . 여기서는 locate filename123
vi 명령에 결과를 추가하고 싶습니다 . 어떻게 해야 하나요? 난 노력 했어:
locate filename123 | vi
그러나 이것은 작동하지 않습니다. 이 오류는 터미널에 나타납니다.
santosh@santosh:~$ locate filename123 | vi
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: Finished.
답변1
당신은 그것을 사용할 수 있습니다 xargs
:
locate filename123 | xargs vi
기본적으로 xargs
지정된 명령의 인스턴스를 가능한 한 적게 실행하고 시스템에 적절한 인수를 전달합니다.ARG_MAX. 인스턴스에 전달되는 인수 수를 제한하려면 ' 옵션을 vi
사용하십시오 .xargs
-n
공백이 포함된 파일 이름을 처리하려면 xargs
' -d
옵션을 사용하십시오.
locate filename123 | xargs -d '\n' vi
개행 문자가 포함된 파일 이름을 처리하려면 xargs
' -0
옵션과 locate
's -0
옵션을 사용하십시오.
locate -0 filename123 | xargs -0 vi
( 또한 -0
이들 중 사용할 수 없는 것이 있는지 --null
확인 하거나 다른 방법을 사용하여 문자를 \000
구분 기호로 지정하십시오.)
답변2
명령 확장을 사용할 수 있습니다.
vi "$(locate filename123 | head -n1)"
표준 입력을 읽으 려면 vim
다음을 수행할 수 있지만 이렇게 하면 파일 이름 path 출력만 제공됩니다 vim -
. 일반 명령을 사용하면 커서가 있는 경로가 열리므로 locate
작동할 수 있습니다 .vim
gf
편집하다
xargs
파일 이름에 공백이 포함된 경우 언급된 옵션이나 vim
위의 해결 방법을 사용하는 것이 좋습니다 . 이것이 gf
작동하려면 공간을 추가해야 합니다 isfname
.
set isfname+=32
이 기술과 대안이 설명되어 있습니다.여기.
편집 2
인용문을 추가하고 head
PeterO의 제안을 따랐습니다.논평.
답변3
가장 간단한 방법은 다음 locate
과 같이 전달하는 것입니다.쉘 교체, 좋다:
vim $(locate filename123)
편집을 위해 파일 이름을 전달하는 find
대신 사용을 고려할 수도 있습니다 . 예를 들면 다음과 같습니다.locate
find . -name 'filename123' -exec vim {} +
xargs
Unix/OSX에서는 다음과 같은 매개변수를 사용할 수 있습니다 -o
.
locate filename123 | xargs -o vim
-o
명령을 실행하기 전에 하위 프로세스에서 /dev/tty로 stdin을 다시 엽니다. 이는 xargs가 대화형 응용 프로그램을 실행하도록 하려는 경우 유용합니다.
또는 Linux에서 다음 해결 방법을 시도해 보세요.
locate filename123 | xargs -J% sh -c 'vim < /dev/tty $@'
다른 명령을 사용하는 경우 다음을 사용하십시오.명령 대체이를 달성하려면 예를 들어 다음과 같습니다.
vim $(locate filename123)
vim `locate filename123`
또는 tty 할당을 강제하는 parallel
대신 GNU를 사용하십시오. 예를 들면 다음과 같습니다.xargs
locate filename123 | parallel -X --tty vi
참고: parallel
Unix/OSX에서는 매개변수가 다르고 tty를 지원하지 않으므로 작동하지 않습니다.
다른 많은 인기 있는 명령도 의사 tty 할당(예: -t
) 을 제공하므로 ssh
도움말을 확인하세요.
다른 제안은 다음과 같습니다.vipe
(Vim 명령 파이프라인) 또는 다음 간단한 스크립트를 사용하세요.
#!/bin/sh
# usage: locate filename123 | vip
exec vim < /dev/tty "$@"
관련된: