diff --git a/bin/pt-agent b/bin/pt-agent index d917c3bb..5e14ca35 100755 --- a/bin/pt-agent +++ b/bin/pt-agent @@ -3381,7 +3381,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-align b/bin/pt-align index 02b361a8..56606ad5 100755 --- a/bin/pt-align +++ b/bin/pt-align @@ -866,7 +866,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-archiver b/bin/pt-archiver index 678b27a4..eef9eec3 100755 --- a/bin/pt-archiver +++ b/bin/pt-archiver @@ -1593,7 +1593,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-config-diff b/bin/pt-config-diff index cfc75148..2da0dbbe 100755 --- a/bin/pt-config-diff +++ b/bin/pt-config-diff @@ -1593,7 +1593,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-deadlock-logger b/bin/pt-deadlock-logger index a4bf978f..0fff1dd6 100755 --- a/bin/pt-deadlock-logger +++ b/bin/pt-deadlock-logger @@ -943,7 +943,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-diskstats b/bin/pt-diskstats index 8add4f31..2b57b6c9 100755 --- a/bin/pt-diskstats +++ b/bin/pt-diskstats @@ -939,7 +939,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-duplicate-key-checker b/bin/pt-duplicate-key-checker index dc759cd3..f25e6d49 100755 --- a/bin/pt-duplicate-key-checker +++ b/bin/pt-duplicate-key-checker @@ -1927,7 +1927,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-fifo-split b/bin/pt-fifo-split index f36ad01c..99b8b44e 100755 --- a/bin/pt-fifo-split +++ b/bin/pt-fifo-split @@ -867,7 +867,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-find b/bin/pt-find index 9afc0379..4570d979 100755 --- a/bin/pt-find +++ b/bin/pt-find @@ -1359,7 +1359,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-fingerprint b/bin/pt-fingerprint index 9e71cfbf..13b1e27f 100755 --- a/bin/pt-fingerprint +++ b/bin/pt-fingerprint @@ -868,7 +868,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-fk-error-logger b/bin/pt-fk-error-logger index 96f288a1..51b27f9e 100755 --- a/bin/pt-fk-error-logger +++ b/bin/pt-fk-error-logger @@ -938,7 +938,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-heartbeat b/bin/pt-heartbeat index 1db79188..6b12416f 100755 --- a/bin/pt-heartbeat +++ b/bin/pt-heartbeat @@ -1675,7 +1675,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-index-usage b/bin/pt-index-usage index 5f4869a4..6c456009 100755 --- a/bin/pt-index-usage +++ b/bin/pt-index-usage @@ -1520,7 +1520,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-kill b/bin/pt-kill index 04557c30..7a3cabb2 100755 --- a/bin/pt-kill +++ b/bin/pt-kill @@ -948,7 +948,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-online-schema-change b/bin/pt-online-schema-change index 84063c65..13101f2d 100755 --- a/bin/pt-online-schema-change +++ b/bin/pt-online-schema-change @@ -955,7 +955,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-query-digest b/bin/pt-query-digest index 89ebaaef..affd39e8 100755 --- a/bin/pt-query-digest +++ b/bin/pt-query-digest @@ -2188,7 +2188,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-show-grants b/bin/pt-show-grants index 0ded0df8..1d9de4e2 100755 --- a/bin/pt-show-grants +++ b/bin/pt-show-grants @@ -868,7 +868,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-slave-delay b/bin/pt-slave-delay index 33514ff8..15e78c7e 100755 --- a/bin/pt-slave-delay +++ b/bin/pt-slave-delay @@ -941,7 +941,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-slave-find b/bin/pt-slave-find index 7bc488bb..35106222 100755 --- a/bin/pt-slave-find +++ b/bin/pt-slave-find @@ -876,7 +876,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-slave-restart b/bin/pt-slave-restart index d0ec3327..be4131cd 100755 --- a/bin/pt-slave-restart +++ b/bin/pt-slave-restart @@ -1093,7 +1093,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-table-checksum b/bin/pt-table-checksum index 3332dbf1..745cbd4f 100755 --- a/bin/pt-table-checksum +++ b/bin/pt-table-checksum @@ -2605,7 +2605,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-table-sync b/bin/pt-table-sync index 51727f7d..5a2f7026 100755 --- a/bin/pt-table-sync +++ b/bin/pt-table-sync @@ -956,7 +956,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-table-usage b/bin/pt-table-usage index 1f5f4663..a4374498 100755 --- a/bin/pt-table-usage +++ b/bin/pt-table-usage @@ -1305,7 +1305,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-upgrade b/bin/pt-upgrade index 39075a53..f3fae793 100755 --- a/bin/pt-upgrade +++ b/bin/pt-upgrade @@ -2185,7 +2185,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-variable-advisor b/bin/pt-variable-advisor index b0643dec..78720979 100755 --- a/bin/pt-variable-advisor +++ b/bin/pt-variable-advisor @@ -945,7 +945,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/bin/pt-visual-explain b/bin/pt-visual-explain index cc8b8e67..6df94152 100755 --- a/bin/pt-visual-explain +++ b/bin/pt-visual-explain @@ -1542,7 +1542,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/lib/OptionParser.pm b/lib/OptionParser.pm index 6b087a4e..e42fd74d 100644 --- a/lib/OptionParser.pm +++ b/lib/OptionParser.pm @@ -1090,7 +1090,7 @@ sub prompt_noecho { shift @_ if ref $_[0] eq __PACKAGE__; my ( $prompt ) = @_; local $OUTPUT_AUTOFLUSH = 1; - print $prompt + print STDERR $prompt or die "Cannot print: $OS_ERROR"; my $response; eval { diff --git a/t/lib/OptionParser.t b/t/lib/OptionParser.t index f56b792f..a85a13bf 100644 --- a/t/lib/OptionParser.t +++ b/t/lib/OptionParser.t @@ -2117,6 +2117,32 @@ is( "--optimize got its value (bug 1199589)" ); + +# ############################################################################# +# Issue 1290911 : prompt_noecho should send prompt to STDERR so user can +# direct STDOUT to a file and still see the prompt +# ############################################################################# + +$o = new OptionParser(); + +$output = output( + sub { + my $input = "thepassword"; + local *STDIN; + open STDIN, '<', \$input; + $o->prompt_noecho('Test Prompt:'); }, + + stderr=>1, + ); + +is ( + $output, + "Test Prompt:\n", + 'prompt_no_echo outputs prompt to STDERR' +); + + + # ############################################################################# # Done. # ############################################################################# @@ -2133,3 +2159,6 @@ like( done_testing; exit; + + +