发出grunt shell:test
时,我收到警告"输入设备不是TTY" &安培;不想使用-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.
这里是Gruntfile.js
命令:
shell: {
test: {
command: './run.sh npm test'
}
此处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 $@
此处使用命令package.json
的相关scripts
test
:
"scripts": {
"test": "mocha --color=true -R spec test/*.test.js && npm run lint"
}
如何让grunt
让docker
对TTY感到满意?在grunt之外执行./run.sh npm test
可以正常工作:
$ ./run.sh npm test
> yaktor@0.59.2-pre.0 test /app
> mocha --color=true -R spec test/*.test.js && npm run lint
[snip]
105 passing (3s)
> yaktor@0.59.2-pre.0 lint /app
> standard --verbose
答案 0 :(得分:60)
从docker run命令中删除-t
:
docker run $RUN_ENV_FILE -i --rm --user node -v "$PWD":/app -w /app yaktor/node:0.39.0 $@
-t
告诉docker配置tty,如果你没有tty并且尝试连接到容器,这将无效(默认情况下你不做-d
)。
答案 1 :(得分:4)
这为我解决了一个恼人的问题。脚本有这些行:
docker exec **-it** $( docker ps | grep mysql | cut -d' ' -f1) mysql --user= ..... > /var/tmp/temp.file
mutt -s "File is here" someone@somewhere.com < /var/tmp/temp.file
如果直接运行脚本将运行良好,并且邮件将带有正确的输出。但是,从cron
,(crontab -e
)运行时,邮件将没有内容。尝试了很多关于权限,shell和路径等的事情。但是没有快乐!
终于找到了这个:
*/20 * * * * scriptblah.sh > $HOME/cron.log 2>&1
在cron.log
文件上找到了这个输出:
输入设备不是TTY
搜索引导我来到这里。在我删除-t
后,它现在运行得很好!
docker exec **-i** $( docker ps | grep mysql | cut -d' ' -f1) mysql --user= ..... > /var/tmp/temp.file