Vuoi migliorare questa domanda? Aggiorna la domanda in modo che sia in argomento per Unix e Linux Stack Exchange.
Chiuso 5 anni fa.
Migliora questa domanda
Sto scrivendo uno script bash basato su menu, una delle opzioni di menu è inviare un'e-mail con un file di testo allegato. Ho problemi con il controllo se il mio file è un file di testo. Ecco cosa ho:
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
Continuo a ricevere l'errore tagliato:il delimitatore deve essere un singolo carattere.
Risposta accettata:
Il problema si verifica in cut -d -f2
. Cambialo in cut -d -f2
.
Per cut
, gli argomenti si presentano così:
# bash: args(){ for i; do printf '%q \n' "$i"; done; }
# args cut -d -f2
cut
-d -f2
Ed ecco il problema. sfuggito allo spazio in uno spazio letterale invece di un delimitatore tra gli argomenti nella tua shell e non hai aggiunto uno spazio extra, quindi l'intero
-d -f2
parte appare come un argomento. Dovresti aggiungere uno spazio in più quindi -d
e -f2
appaiono come due argomenti.
Per evitare confusione, molte persone usano virgolette come -d' '
invece.
P.S.:invece di usare file e fare tutto ASCII, preferisco usare
if file "$attachment2" | grep -q text$; then
# is text
else
# file doesn't think it's text
fi