Chcete zlepšit tuto otázku? Aktualizujte otázku, aby byla aktuální pro Unix a Linux Stack Exchange.
Zavřeno před 5 lety.
Vylepšete tuto otázku
Píšu bash skript založený na nabídce, jednou z možností nabídky je poslat e-mail s přílohou textového souboru. Mám potíže s kontrolou, zda můj soubor je textový soubor. Tady je to, co mám:
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
Stále se mi zobrazuje chyba:oddělovač musí být jeden znak.
Přijatá odpověď:
Problém nastává v cut -d -f2
. Změňte jej na cut -d -f2
.
Chcete-li cut
, argumenty vypadají takto:
# bash: args(){ for i; do printf '%q \n' "$i"; done; }
# args cut -d -f2
cut
-d -f2
A tady je problém. místo oddělovače mezi argumenty ve vašem shellu unikl mezerou na mezerový literál místo oddělovače a nepřidali jste mezeru navíc, takže celý
-d -f2
část se objeví jako jeden argument. Měli byste přidat jednu mezeru navíc, takže -d
a -f2
se objeví jako dva argumenty.
Aby se předešlo zmatkům, mnoho lidí používá uvozovky jako -d' '
místo toho.
P.S.:Místo použití souboru a vytvoření všeho v ASCII bych raději použil
if file "$attachment2" | grep -q text$; then
# is text
else
# file doesn't think it's text
fi