bti: suppress prompt if fed from a pipe
authorPete Zaitcev <zaitcev@redhat.com>
Sun, 21 Mar 2010 20:46:03 +0000 (14:46 -0600)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 22 Mar 2010 20:04:51 +0000 (13:04 -0700)
Do not use readline for non-interactive sessions (e.g. those taking
input from a pipe or file). This way stray prompts are not shown.
Explicit prompts are retained, in case some script expects them.

Signed-off-by: Pete Zaitcev <zaitcev@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
bti.c

diff --git a/bti.c b/bti.c
index 285fdfa..02b8aea 100644 (file)
--- a/bti.c
+++ b/bti.c
@@ -83,6 +83,7 @@ struct session {
        char *hosturl;
        char *hostname;
        int bash;
+       int interactive;
        int shrink_urls;
        int dry_run;
        int page;
@@ -172,8 +173,11 @@ static void session_readline_init(struct session *session)
        int (*bind_key)(int, void *);
        void (*insert)(void);
 
-       /* default to internal function if we can't find anything */
+       /* default to internal function if we can't or won't find anything */
        session->readline = get_string;
+       if (!isatty(0))
+               return;
+       session->interactive = 1;
 
        tmp = malloc(strlen(libpath)+1);
        if (!tmp)
@@ -1245,7 +1249,7 @@ int main(int argc, char *argv[], char *envp[])
        }
 
        if (session->action == ACTION_UPDATE) {
-               if (session->bash)
+               if (session->bash || !session->interactive)
                        tweet = get_string_from_stdin();
                else
                        tweet = session->readline("tweet: ");