Möchten Sie diese Frage verbessern? Aktualisieren Sie die Frage so, dass sie für Unix &Linux Stack Exchange relevant ist.
Vor 5 Jahren geschlossen.
Verbessern Sie diese Frage
Ich schreibe ein menübasiertes Bash-Skript, eine der Menüoptionen besteht darin, eine E-Mail mit einem Textdateianhang zu senden. Ich habe Probleme mit der Überprüfung, ob meine Datei eine Textdatei ist. Folgendes habe ich:
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
Ich bekomme immer wieder den Fehler cut:delimiter must be a single character.
Akzeptierte Antwort:
Das Problem tritt in cut -d -f2
auf . Ändern Sie es in cut -d -f2
.
Zum cut
, sehen die Argumente so aus:
# bash: args(){ for i; do printf '%q \n' "$i"; done; }
# args cut -d -f2
cut
-d -f2
Und hier ist das Problem. das Leerzeichen in ein Leerzeichen anstelle eines Trennzeichens zwischen Argumenten in Ihrer Shell umgestellt, und Sie haben kein zusätzliches Leerzeichen hinzugefügt, also das ganze
-d -f2
part erscheint als ein Argument. Sie sollten ein zusätzliches Leerzeichen hinzufügen, also -d
und -f2
erscheinen als zwei Argumente.
Um Verwirrung zu vermeiden, verwenden viele Leute Anführungszeichen wie -d' '
stattdessen.
P.S.:Anstatt Datei zu verwenden und alles ASCII zu machen, würde ich lieber
verwendenif file "$attachment2" | grep -q text$; then
# is text
else
# file doesn't think it's text
fi