閉鎖。 この質問はトピックから外れています。現在、回答を受け付けていません。
この質問を改善する
Linux
この質問を改善したいですか? 質問を更新して、UnixおよびLinuxStackExchangeのトピックになります。
5年前に閉鎖されました。
この質問を改善する
私はメニューベースのbashスクリプトを書いていますが、メニューオプションの1つは、テキストファイルを添付した電子メールを送信することです。ファイルがテキストファイルかどうかを確認できません。これが私が持っているものです:
fileExists=10
until [ $fileExists -eq 9 ]
do
echo "Please enter the name of the file you want to attach: "
read attachment
isFile=$(file $attachment | cut -d -f2)
if [[ $isFile = "ASCII" ]]
then
fileExists=0
else
echo "$attachment is not a text file, please use a different file"
fi
done
エラーカットが発生し続けます。区切り文字は1文字である必要があります。
承認された回答:
この問題はcut-d -f2
で発生します 。 cut -d -f2
に変更します 。
カットコード>するには 、引数は次のようになります:
# bash: args(){ for i; do printf '%q \n' "$i"; done; }
# args cut -d -f2
cut
-d -f2
そしてここに問題があります。 コード> シェル内の引数間の区切り文字ではなく、スペースリテラルにスペースをエスケープし、スペースを追加しなかったため、
-d -f2
全体 一部は1つの引数として表示されます。 -d
のように、スペースを1つ追加する必要があります および-f2
2つの引数として表示されます。
混乱を避けるために、多くの人は -d''
のような引用符を使用します 代わりに。
追伸:ファイルを使用してすべてをASCIIにする代わりに、使用したい
if file "$attachment2" | grep -q text$; then
# is text
else
# file doesn't think it's text
fi