aspell을 통해 사용자 입력의 철자를 검사하지만 이 경우 대화형 모드를 호출하는 방법은 무엇입니까?

aspell을 통해 사용자 입력의 철자를 검사하지만 이 경우 대화형 모드를 호출하는 방법은 무엇입니까?

사용자 문장을 받는 스크립트를 작성했고 문자열을 다음으로 파이프하고 싶습니다.아스퍼그리고 나서인터렉티브화면 제안(사용자가 맞춤법 오류를 범하는 경우) 그 후, 단어가 스크립트로 다시 전송되고 철자가 틀린 부분을 해당 단어로 대체합니다.

나는 aspell 옵션에 대해 알고 있습니다.

1) 파일의 철자 오류를 확인하고 제안 목록을 표시합니다.대화형 모드에서:

aspell check <file name>

2) 파일의 철자 오류를 확인하고 제안 목록을 표시합니다.대화형 모드가 아님:

cat <filename> | aspell -a

하지만 옵션 1을 시도하면"오류: stdin은 터미널이 아닙니다.", 이 문제를 극복하는 방법에 대한 생산적인 조언을 얻고 싶습니다. :)

감사해요

답변1

임시 파일을 사용하지 않고는 이 문제를 피할 수 없을 것 같습니다. 명령 대체 형태로 이에 대한 기본 지원이 있습니다 zsh.=(...)

여기서는 변수의 내용( 의 출력 printf %s $string)에 대한 맞춤법 검사가 수행됩니다.

{
  (){
    aspell check -x $1 >&3 3>&-
    cat $1
  } =(printf %s $string) | IFS= read -rd '' corrected_string
} 3>&1

답변2

이것이 나를 위해 일한 솔루션입니다.

TMP_FILE=`mktemp`

echo "${USER_INPUT}" > "${TMP_FILE}"

# Allows me to read user input below, assigns stdin to keyboard
exec < /dev/tty

# I'm assuming you have a aspell (spell checker) installed on your system
# invoke aspell and check for typos
/usr/bin/aspell check "${TMP_FILE}"

ANSWER=$(cat $TMP_FILE )

if [[ "${ANSWER}" != "${USER_INPUT}" ]]; then
    echo "After applying fixes: ${ANSWER}"
fi

즐기다!

답변3

나는 dict라고 부르는 한 줄짜리 쉘 스크립트를 작성했습니다.

#!/bin/sh
echo $* | aspell pipe

dict charitible @(#) International Ispell 버전 3.1.20 (실제로는 Aspell 0.60.7-20110707)
& charitible 8 0: 자선, 자선, 상속 가능, 쓰기 가능, 쓰기 가능, 신뢰할 수 있음, 공유 가능, 짜증남

관련 정보