PHP process output (?) that breaks bash completion

Bug #514989 reported by lexsimon
32
This bug affects 7 people
Affects Status Importance Assigned to Milestone
php5 (Ubuntu)
Confirmed
Low
Unassigned

Bug Description

Binary package hint: php5

Hello,

I first tried to post : http://ubuntuforums.org/showthread.php?p=8734334 and after recompiling from php.net sources, I'm now convinced there is something wrong in patches that are applied or in some compilation option.

Goal : complete the command line ./myscript.sh.
Steps :
- create die.php, completion.sh and myscript.sh in current folder using the following code sample
- chmod 755 myscript.sh
- source completion.sh in current bash
- try to complete ./myscript.sh : it works
- uncomment die.php call in completion.sh
- source completion.sh again
- try to complete ./myscript.sh : it does not work. A simple call to php process breaks the thing. Only with ubuntu PHP packages (tested on 8.04 and 9.10 releases ;

== die.php ==

<?php
// Not so much ;)
die();

== completion.sh ==

#!/bin/bash

_completemyscript()
{
        local cur cmds cmdOpts
        cur="${COMP_WORDS[COMP_CWORD]}"

        # Normally, nothing should happened with this line
        #php die.php > /tmp/somefile 2>&1

        # Static completion
        COMPREPLY=( $( compgen -W "a b c d" -- "${cur}" ) )
        return 0
}

complete -F _completemyscript -o "default" myscript.sh

== myscript.sh ==

#!/bin/bash
echo "Hello World"

Revision history for this message
Ondřej Surý (ondrej) wrote :

Hi,

could you provide versions of Ubuntu you are running and version of php5?

Also list of installed modules would be great, there are known bugs; one in mysql, when running on multiple cores, and second in pgsql+curl modules.

Ondrej

Revision history for this message
lexsimon (lexsimon) wrote : Re: [Bug 514989] Re: PHP process output (?) that breaks bash completion

Hi and thank you for answering :),

Sorry, I thought I gave the Ubuntu versions : I tried 8.04 and 9.10.
The thing can be reproduced using a fresh 9.10 server installation + OpenSSH server profile and additional php5-cli package. I didn't tried without SSH because I always use it but I do think there is some dependency ?

I give the packages from this install as attachment (packages.txt)

Hope you will be able to find something because compilation stuff is not my specialty and I have a lot of PHP business logic that is behind this completion and makes the tool I code very more usable ...

Regards,

Le 31 janv. 2010 à 20:19, Ondřej Surý a écrit :

> Hi,
>
> could you provide versions of Ubuntu you are running and version of
> php5?
>
> Also list of installed modules would be great, there are known bugs; one
> in mysql, when running on multiple cores, and second in pgsql+curl
> modules.
>
> Ondrej
>
> --
> PHP process output (?) that breaks bash completion
> https://bugs.launchpad.net/bugs/514989
> You received this bug notification because you are a direct subscriber
> of the bug.
>
> Status in “php5” package in Ubuntu: New
>
> Bug description:
> Binary package hint: php5
>
> Hello,
>
> I first tried to post : http://ubuntuforums.org/showthread.php?p=8734334 and after recompiling from php.net sources, I'm now convinced there is something wrong in patches that are applied or in some compilation option.
>
> Goal : complete the command line ./myscript.sh.
> Steps :
> - create die.php, completion.sh and myscript.sh in current folder using the following code sample
> - chmod 755 myscript.sh
> - source completion.sh in current bash
> - try to complete ./myscript.sh : it works
> - uncomment die.php call in completion.sh
> - source completion.sh again
> - try to complete ./myscript.sh : it does not work. A simple call to php process breaks the thing. Only with ubuntu PHP packages (tested on 8.04 and 9.10 releases ;
>
> == die.php ==
>
> <?php
> // Not so much ;)
> die();
>
> == completion.sh ==
>
> #!/bin/bash
>
> _completemyscript()
> {
> local cur cmds cmdOpts
> cur="${COMP_WORDS[COMP_CWORD]}"
>
> # Normally, nothing should happened with this line
> #php die.php > /tmp/somefile 2>&1
>
> # Static completion
> COMPREPLY=( $( compgen -W "a b c d" -- "${cur}" ) )
> return 0
> }
>
> complete -F _completemyscript -o "default" myscript.sh
>
> == myscript.sh ==
>
> #!/bin/bash
> echo "Hello World"
>
> To unsubscribe from this bug, go to:
> https://bugs.launchpad.net/ubuntu/+source/php5/+bug/514989/+subscribe

--
Alexandre Simon
http://alex.zybar.net

Revision history for this message
lexsimon (lexsimon) wrote :

Hi and thank you for answering :),

Sorry, I thought I gave the Ubuntu versions : I tried 8.04 and 9.10.
The thing can be reproduced using a fresh 9.10 server installation + OpenSSH server profile and additional php5-cli package (5.2.10.dfsg.1-2ubuntu6.4). I didn't tried without SSH because I always use it but I do think there is some dependency ?

I give the packages from the 9.10 install as attachment (packages.txt).

Revision history for this message
lexsimon (lexsimon) wrote :
Chuck Short (zulcss)
Changed in php5 (Ubuntu):
importance: Undecided → Low
status: New → Confirmed
Revision history for this message
teles (teles-php) wrote :

Hello,
So it's a bug :)
I search the reason for a while and found nothing.
Any idea of resolution date? (I hope soon :))

Thanks!

Revision history for this message
MaximeC (maxime-webmaster) wrote :

Hi
any solution for this bugs ??

TY
Max

Revision history for this message
H (matthieu-houver) wrote :

:(
I'm also waiting for a fast resolution....any news ?

Revision history for this message
LePhasme (sebastien-courvoisier) wrote :

Hi,

This bug also deeply impacts our production since it breaks valuable features.

Please be kind to quickly fix this issue.

Revision history for this message
Raphael Geissert (atomo64) wrote :

Without testing it at all in Ubuntu, this sounds like the libedit bug (which I don't know how/why somebody at Ubuntu assumed it was fixed). Calling php from a compgen script work fine in Debian, another indication that it might be the libedit bug.

Revision history for this message
lexsimon (lexsimon) wrote :

You're right: I took the source packages and modified debian/rules, removing --with-libedit before to compile it : it solves the problem.

Revision history for this message
chEbba (j-pam-3) wrote :

Any news here? It's almost 2 years for this bug which is really annoying

Revision history for this message
Florian Dorn (florian-dorn) wrote :

I am affected by this bug as well. I'm running 10.04.

Revision history for this message
Florian Dorn (florian-dorn) wrote :

After some more looking I've found a workaround for this problem, described here:
http://clock.co.uk/tech-blogs/bash-completion-problems-with-option-lists-generated-by-php-

The trick is to prefixed the php script with a blank echo.

Revision history for this message
lexsimon (lexsimon) wrote :

The trick is more about the pipe and PHP "knowing" no terminal interactions will be (and then no readline library call i assume). I confirm it is a way to get it working ; good news :)

Revision history for this message
lexsimon (lexsimon) wrote :

(hmm ... readline ... libedit ... sorry)

Revision history for this message
Florian Dorn (florian-dorn) wrote :

You're right. It's not the echo but actually the piping. Thanks to Paul Serby for posting the workaround.

Revision history for this message
Peter Newman (peternewman) wrote :

For anyone else who's hit this, the page has now moved to http://www.clock.co.uk/blog/bash-completion-problems-with-option-lists-generated-by-php it's also still available in Google's cache here:
http://webcache.googleusercontent.com/search?q=cache:n-AfIM1nmMYJ:http://clock.co.uk/blog/bash-completion-problems-with-option-lists-generated-by-php%2Bbash+completion+problems+with+option+lists+generated+by+php&rls=com.microsoft:en-gb:IE-SearchBox&oe=&gfe_rd=cr&gws_rd=cr&hl=en&ct=clnk

And the key info (in case it vanishes again) is:
  targets=`echo ""| maiden -b | sort -u`
  COMPREPLY=( $(compgen -W "${targets}" -- ${cur}) )
  return 0

i.e. add echo "" | before your PHP script.

Revision history for this message
Robie Basak (racb) wrote :

It sounds like this is either an upstream bug in either libedit or PHP's libedit support, or is behaviour by design that is causing an unintended interaction with bash completion. This should be sent upstream to reach a resolution; I don't see that any action can be taken in Ubuntu to fix it.

tags: added: needs-upstream-report
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.