현재 디렉터리의 모든 파일에 대한 맞춤법 검사를 시도하고 있지만 *.md
다음 명령이 실패합니다.
>> find . -maxdepth 1 -name "*.md" | xargs -I {} aspell check {}
xargs: aspell: exited with status 255; aborting
나는 이것이 사용자 상호 작용이 aspell
필요 stdin
하지만 어떻게든 xargs
제공되지 않기 때문이라고 가정합니다. 내가 하나 찾았어해커가 트위터를 공격하다,
find . -maxdepth 1 -name "*.md" | xargs -n 1 xterm -e aspell check
그러나 이것은 매번 새로운 xterm을 엽니다. find 명령만 실행한 결과처럼 원래 명령이 작동하도록 하려면 어떻게 해야 합니까 aspell
?
답변1
xargs
전혀 필요하지 않으며exec
옵션을 사용하십시오.find . -maxdepth 1 -name "*.md" -exec aspell check {} \;
귀하 또는 미래의 독자가 사용해야 하는 경우를 대비하여
xargs
새 셸을 생성하고 터미널( )에서 표준 입력을 가져와/dev/tty
이를 수행 할 수 있습니다.find . -maxdepth 1 -name "*.sh" | xargs -n1 sh -c 'aspell check "$@" < /dev/tty' aspell
답변2
언제든지 간단한 루프를 사용할 수 있습니다.
for f in *.md; do aspell check "$f"; done
답변3
동의합니다. xargs
with를 사용하는 find
것은 중복되지만 입력이 다른 것에서 나오는 경우가지다를 사용하려면 xargs
다음을 사용하세요 -o
.
grep -rl 'draft: false' | xargs -o -n1 aspell check --sug-mode=slow
man xargs
그것은 말한다:
-o 명령을 실행하기 전에 하위 프로세스에서 /dev/tty로 stdin을 다시 엽니다. 이는 xargs가 대화형 응용 프로그램을 실행하도록 하려는 경우 유용합니다.