我编写了一个接收用户句子的脚本,我想将字符串通过管道传输到阿斯佩尔然后得到交互的屏幕的建议(以防用户有一些拼写错误)。之后,这些单词将被发送回脚本,我会用相应的单词替换拼写错误。
我知道 aspell 选项:
1) 检查文件是否有拼写错误并显示建议列表在交互模式下:
aspell check <file name>
2) 检查文件是否有拼写错误并显示建议列表不在交互模式下:
cat <filename> | aspell -a
但如果我尝试选项一,我会得到“错误:标准输入不是终端。”,我会很高兴得到任何富有成效的提示如何克服这个问题? :)
谢谢
答案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
我写了一个 1 行 shell 脚本,我称之为 dict:
#!/bin/sh
echo $* | aspell pipe
dict charitible @(#) International Ispell Version 3.1.20 (但实际上是 Aspell 0.60.7-20110707)
& charitible 8 0: 慈善的、慈善的、可遗传的、可写的、可写的、可信的、可共享的、易怒的