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と呼ばれる1行のシェルスクリプトを書いた。

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

dict charitible @(#) International Ispell バージョン 3.1.20 (実際には Aspell 0.60.7-20110707)
& charitible 8 0: 慈善、慈善、継承可能、書き込み可能、​​書き込み可能、​​信頼できる、共有可能、イライラ

関連情報