How to workaround “the input device is not a TTY” when using grunt-shell to invoke a script that calls docker run?

后端 未结 2 1727
刺人心
刺人心 2020-12-29 20:02

When issuing grunt shell:test, I\'m getting warning \"the input device is not a TTY\" & don\'t want to have to use -f:

$ grunt          


        
相关标签:
2条回答
  • 2020-12-29 20:47

    Remove the -t from the docker run command:

    docker run $RUN_ENV_FILE -i --rm --user node -v "$PWD":/app -w /app yaktor/node:0.39.0 $@
    

    The -t tells docker to configure the tty, which won't work if you don't have a tty and try to attach to the container (default when you don't do a -d).

    0 讨论(0)
  • 2020-12-29 20:59

    This solved an annoying issue for me. The script had these lines:

    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
    

    The script would run great if run directly and the mail would come with the correct output. However, when run from cron, (crontab -e) the mail would come with no content. Tried many things around permissions and shells and paths etc. However no joy!

    Finally found this:

    */20 * * * * scriptblah.sh > $HOME/cron.log 2>&1
    

    And on that cron.log file found this output:

    the input device is not a TTY

    Search led me here. And after I removed the -t, it's working great now!

    docker exec **-i**  $( docker ps | grep mysql | cut -d' ' -f1)  mysql --user= ..... > /var/tmp/temp.file
    
    0 讨论(0)
提交回复
热议问题