사용자 문장을 받는 스크립트를 작성했고 문자열을 다음으로 파이프하고 싶습니다.아스퍼그리고 나서인터렉티브화면 제안(사용자가 맞춤법 오류를 범하는 경우) 그 후, 단어가 스크립트로 다시 전송되고 철자가 틀린 부분을 해당 단어로 대체합니다.
나는 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: 자선, 자선, 상속 가능, 쓰기 가능, 쓰기 가능, 신뢰할 수 있음, 공유 가능, 짜증남