S'il y a un "First World Problems" pour le script, ce serait bien.
J'ai le code suivant dans un script que je mets à jour:
if [ $diffLines -eq 1 ]; then
dateLastChanged=$(stat --format '%y' /.bbdata | awk '{print $1" "$2}' | sed 's/\.[0-9]*//g')
mailx -r "Systems and Operations <sysadmin@[redacted].edu>" -s "Warning Stale BB Data" jadavis6@[redacted].edu <<EOI
Last Change: $dateLastChanged
This is an automated warning of stale data for the UNC-G Blackboard Snapshot process.
EOI
else
echo "$diffLines have changed"
fi
Le script envoie un courrier électronique sans problème, mais la commande mailx est imbriquée dans une instruction if. Il semble donc que je dispose de deux choix:
- Mettez
EOI
une nouvelle ligne et brisez les motifs d’indentation ou - Conservez-le avec indentation mais utilisez quelque chose comme une déclaration echo pour que mailx suce mon courrier électronique.
Je suis ouvert aux alternatives à heredoc, mais s'il existe un moyen de contourner cela, c'est ma syntaxe préférée.
la source
$dateLastChanged
n’élargit pas la variable que j’essaie de mettre dedans ( ) si je fais la chose hypen + quotes dans votre exemple, mais si je prends le trait d’union et cite et mets EOI sur un nouvelle ligne, il recommence à l'agrandir.cat << EOF | sed 's/^ *//'
et ainsi de suite.cat <<- EOF | awk 'NR==1 && match($0, /^ +/){n=RLENGTH} {print substr($0, n+1)}'
. Cela supprime la quantité d'espaces précédents de la première ligne de chaque ligne du document here (grâce à anubhava ).Si vous n'avez pas besoin de substitution de commande ni de développement de paramètres dans votre document here, vous pouvez éviter d'utiliser des tabulations en ajoutant les espaces de début au délimiteur:
Je ne pouvais pas trouver un moyen d'utiliser cette astuce et garder l'expansion des paramètres, cependant.
la source
shell-check
trouvera toute modification d’indentation qui ne correspond pas aux espaces de la chaîne citée. Utilisez les guillemets doubles pour développer les paramètres?Essaye ça:
la source
Hmm ... On dirait que vous pourriez mieux tirer parti de l'
--format
argument présenté ici pour utiliser--printf
plutôt que de passer le tout au-dessus d'un tuyau. En outre, votreif...fi
commande est composée - elle peut prendre une redirection dont toutes les commandes contenues hériteront. Vous n'avez donc peut-être pas besoin d'imbriquer l'hérédoc.la source
sed
/ ne me dérangeait pasawk
. Une partie de ma révision d’aujourd’hui consistait à le supprimer car cela n’était pas lié à la question. De toute façon, il est six d'une demi-douzaine de l'autre.L'autre méthode serait herestrings:
la source