Lors de l'émission grunt Shell:test
, Je reçois un avertissement "le périphérique d’entrée n’est pas un téléscripteur" et ne souhaite pas avoir à utiliser -f
:
$ grunt Shell:test
Running "Shell:test" (Shell) task
the input device is not a TTY
Warning: Command failed: /bin/sh -c ./run.sh npm test
the input device is not a TTY
Use --force to continue.
Aborted due to warnings.
Ici se trouve le Gruntfile.js
commande:
Shell: {
test: {
command: './run.sh npm test'
}
Voici run.sh
:
#!/bin/sh
# should use the latest available image to validate, but not LATEST
if [ -f .env ]; then
RUN_ENV_FILE='--env-file .env'
fi
docker run $RUN_ENV_FILE -it --rm --user node -v "$PWD":/app -w /app yaktor/node:0.39.0 $@
Voici le pertinent package.json
scripts
avec la commande test
:
"scripts": {
"test": "mocha --color=true -R spec test/*.test.js && npm run lint"
}
Comment obtenir grunt
pour rendre docker
heureux avec un téléscripteur? Exécution ./run.sh npm test
en dehors de grunt fonctionne bien:
$ ./run.sh npm test
> [email protected] test /app
> mocha --color=true -R spec test/*.test.js && npm run lint
[snip]
105 passing (3s)
> [email protected] lint /app
> standard --verbose
Retirer le -t
à partir de la commande d'exécution du menu fixe:
docker run $RUN_ENV_FILE -i --rm --user node -v "$PWD":/app -w /app yaktor/node:0.39.0 $@
Le -t
indique à docker de configurer le terminal, ce qui ne fonctionnera pas si vous n’avez pas de terminal et n’attachez pas le conteneur (valeur par défaut lorsque vous ne faites pas de script -d
).
Cela a résolu un problème agaçant pour moi. Le script avait ces lignes:
docker exec **-it** $( docker ps | grep mysql | cut -d' ' -f1) mysql --user= ..... > /var/tmp/temp.file
mutt -s "File is here" [email protected] < /var/tmp/temp.file
Le script fonctionnerait parfaitement s'il était exécuté directement et le courrier venait avec le bon résultat. Cependant, lorsqu’il est exécuté à partir de cron
, (crontab -e
) le courrier viendrait sans contenu. Essayé beaucoup de choses autour des autorisations et des coquillages et des chemins, etc. Cependant pas de joie!
Enfin trouvé ceci:
*/20 * * * * scriptblah.sh > $HOME/cron.log 2>&1
Et sur ce cron.log
fichier a trouvé cette sortie:
le périphérique d'entrée n'est pas un téléscripteur
La recherche m'a conduit ici. Et après avoir enlevé le -t
, ça marche très bien maintenant!
docker exec **-i** $( docker ps | grep mysql | cut -d' ' -f1) mysql --user= ..... > /var/tmp/temp.file