[MacPorts] #44558: bash-completion on ssh hostname adds bad function, causes syntax errors
#44558: bash-completion on ssh hostname adds bad function, causes syntax errors --------------------------------------+-------------------------------- Reporter: Daniel.Lipofsky@… | Owner: macports-tickets@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.3.1 Keywords: bash-completion ssh _scp | Port: bash-completion --------------------------------------+-------------------------------- Initially this works: {{{ ~$ /opt/local/bin/bash -c "/bin/echo foobar" foobar ~$ /bin/bash -c "/bin/echo foobar" foobar ~$ /bin/sh -c "/bin/echo foobar" foobar }}} then I use ssh and I hit TAB to autocomplete the host name: {{{ ~$ ssh foo.example.com ... [me@foo ~]$ exit logout Connection to foo.example.com closed. }}} There when I run the same tests again I get an error {{{ ~$ /opt/local/bin/bash -c "/bin/echo foobar" /opt/local/bin/bash: _scp: line 28: syntax error near unexpected token `(' /opt/local/bin/bash: _scp: line 28: ` !(*:*)/* | [.~]*)' /opt/local/bin/bash: error importing function definition for `_scp' foobar ~$ /bin/bash -c "/bin/echo foobar" /bin/bash: _scp: line 28: syntax error near unexpected token `(' /bin/bash: _scp: line 28: ` !(*:*)/* | [.~]*)' /bin/bash: error importing function definition for `_scp' foobar ~$ /bin/sh -c "/bin/echo foobar" /bin/sh: _scp: line 28: syntax error near unexpected token `(' /bin/sh: _scp: line 28: ` !(*:*)/* | [.~]*)' /bin/sh: error importing function definition for `_scp' foobar }}} Removing the function definition clears the error {{{ ~$ unset -f _scp ~$ /opt/local/bin/bash -c "/bin/echo foobar" foobar ~$ /bin/bash -c "/bin/echo foobar" foobar ~$ /bin/sh -c "/bin/echo foobar" foobar }}} additional info {{{ ~$ uname -srvpoi Darwin 13.3.0 Darwin Kernel Version 13.3.0: Tue Jun 3 21:27:35 PDT 2014; root:xnu-2422.110.17~1/RELEASE_X86_64 i386 MacBookPro8,2 Darwin ~$ type -all bash; echo $BASH_VERSION; bash -version | grep version.*release bash is /opt/local/bin/bash bash is /bin/bash 4.3.18(1)-release GNU bash, version 4.3.18(1)-release (x86_64-apple-darwin13.2.0) ~$ port installed | grep -iE 'bash|complet|ssh|ssl' bash @4.3.18_0 (active) bash-completion @2.1_8 (active) curl @7.37.1_0+ssl (active) openssl @1.0.1h_0 (active) p5.16-io-socket-ssl @1.981.0_0 (active) p5.16-net-smtp-ssl @1.10.0_0 (active) p5.16-net-ssleay @1.580.0_0 (active) wget @1.15_1+ssl (active) wireshark @1.10.7_2+adns+geoip+gnutls+ipv6+libgcrypt+libsmi+lua+rtp+ssl+x11 (active) }}} -- Ticket URL: <https://trac.macports.org/ticket/44558> MacPorts <http://www.macports.org/> Ports system for OS X
#44558: bash-completion on ssh hostname adds bad function, causes syntax errors --------------------------------+---------------------- Reporter: Daniel.Lipofsky@… | Owner: raimue@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.3.1 Resolution: | Keywords: Port: bash-completion | --------------------------------+---------------------- Changes (by mf2k@…): * cc: Daniel.Lipofsky@… (removed) * owner: macports-tickets@… => raimue@… * keywords: bash-completion ssh _scp => Comment: In the future, please Cc the port maintainers ({{{port info --maintainers bash-completion}}}). As reporter, you do not need to Cc yourself. -- Ticket URL: <https://trac.macports.org/ticket/44558#comment:2> MacPorts <http://www.macports.org/> Ports system for OS X
#44558: bash-completion on ssh hostname adds bad function, causes syntax errors --------------------------------+---------------------- Reporter: Daniel.Lipofsky@… | Owner: raimue@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.3.1 Resolution: | Keywords: Port: bash-completion | --------------------------------+---------------------- Comment (by Daniel.Lipofsky@…): There seems to be a similar error for RPM {{{ /bin/sh: _rpm: line 93: syntax error in conditional expression: unexpected token `(' /bin/sh: _rpm: line 93: syntax error near `-@(*' /bin/sh: _rpm: line 93: ` if [[ ${words[@]} == *\ -@(*([^ -])f|-file )* ]]; then' /bin/sh: error importing function definition for `_rpm' }}} -- Ticket URL: <https://trac.macports.org/ticket/44558#comment:3> MacPorts <http://www.macports.org/> Ports system for OS X
#44558: bash-completion on ssh hostname adds bad function, causes syntax errors --------------------------------+---------------------- Reporter: Daniel.Lipofsky@… | Owner: raimue@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.3.1 Resolution: | Keywords: Port: bash-completion | --------------------------------+---------------------- Comment (by raimue@…): Somehow I can't reproduce this problem. I tried tab completion of hostnames for ssh with both a list presented and no list, but the test commands produced the same output as before and no error messages. I run bash as my login shell, but also testing in a newly spawned bash I can't reproduce it. {{{ $ type _scp -bash: type: _scp: not found $ ssh foo.example.org<Tab> ... raimue@foo $ logout Connection to foo.example.org closed. $ type -t _scp function $ /opt/local/bin/bash -c "/bin/echo foobar" foobar $ /bin/bash -c "/bin/echo foobar" foobar $ /bin/sh -c "/bin/echo foobar" foobar $ }}} {{{ $ port -q installed bash* and active bash @4.3.18_0 (active) bash-completion-devel @2.1_7 (active) }}} -- Ticket URL: <https://trac.macports.org/ticket/44558#comment:4> MacPorts <http://www.macports.org/> Ports system for OS X
#44558: bash-completion on ssh hostname adds bad function, causes syntax errors --------------------------------+---------------------- Reporter: Daniel.Lipofsky@… | Owner: raimue@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.3.1 Resolution: | Keywords: Port: bash-completion | --------------------------------+---------------------- Comment (by Daniel.Lipofsky@…): It's still a problem for me. I noticed you are using bash- completion'''-devel''' @2.1_7 while I am using bash-completion @2.1_8. I don't know if that could be the difference. Maybe compare to my _scp definition. I've attached the file that defines it and also pinter the definition from my bash shell. {{{ $ find /opt/local/share/bash-completion/completions -xtype f | xargs -r grep -l '_scp()' | xargs -r ls -l lrwxr-xr-x 1 root admin 3 Apr 8 04:27 /opt/local/share/bash- completion/completions/autossh -> ssh lrwxr-xr-x 1 root admin 3 Apr 8 04:27 /opt/local/share/bash- completion/completions/scp -> ssh lrwxr-xr-x 1 root admin 3 Apr 8 04:27 /opt/local/share/bash- completion/completions/sftp -> ssh lrwxr-xr-x 1 root admin 3 Apr 8 04:27 /opt/local/share/bash- completion/completions/slogin -> ssh -rw-r--r-- 1 root admin 11766 Apr 8 04:27 /opt/local/share/bash- completion/completions/ssh $ type _scp _scp is a function _scp () { local cur prev words cword; _init_completion -n : || return; local configfile prefix; _ssh_suboption_check && { COMPREPLY=("${COMPREPLY[@]/%/ }"); return 0 }; case $prev in -l | -P) return 0 ;; -F | -i | -S) _filedir; compopt +o nospace; return 0 ;; -c) _ssh_ciphers; COMPREPLY=("${COMPREPLY[@]/%/ }"); return 0 ;; -o) _ssh_options; return 0 ;; esac; _expand || return 0; case $cur in !(*:*)/* | [.~]*) ;; *:*) _scp_remote_files; return 0 ;; esac; if [[ "$cur" == -F* ]]; then cur=${cur#-F}; prefix=-F; else set -- "${words[@]}"; while [[ $# -gt 0 ]]; do if [[ $1 == -F* ]]; then if [[ ${#1} -gt 2 ]]; then configfile="$(dequote "${1:2}")"; else shift; [[ -n $1 ]] && configfile="$(dequote "$1")"; fi; break; fi; shift; done; case $cur in -*) COMPREPLY=($( compgen -W '$( _parse_usage "${words[0]}" )' -- "$cur" )); COMPREPLY=("${COMPREPLY[@]/%/ }"); return 0 ;; */* | [.~]*) ;; *) _known_hosts_real -c -a -F "$configfile" "$cur" ;; esac; fi; _scp_local_files "$prefix"; return 0 } }}} -- Ticket URL: <https://trac.macports.org/ticket/44558#comment:5> MacPorts <http://www.macports.org/> Ports system for OS X
#44558: bash-completion on ssh hostname adds bad function, causes syntax errors --------------------------------+---------------------- Reporter: Daniel.Lipofsky@… | Owner: raimue@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.3.1 Resolution: | Keywords: Port: bash-completion | --------------------------------+---------------------- Comment (by raimue@…): bash-completion and bash-completion-devel are identical at the moment as there is no pre-release available. I checked that my `/opt/local/share /bash-completion/completions/ssh` matches the file attached by you. Also the definition for `_scp` is exactly the same in my shell. From your command above, do you have /opt/local/libexec/gnubin in your PATH? The options are not accepted that way by `/usr/bin/xargs` or `/usr/bin/find`. However, even when I add that to the front of my PATH I still can't reproduce the problem. -- Ticket URL: <https://trac.macports.org/ticket/44558#comment:6> MacPorts <http://www.macports.org/> Ports system for OS X
#44558: bash-completion on ssh hostname adds bad function, causes syntax errors --------------------------------+---------------------- Reporter: Daniel.Lipofsky@… | Owner: raimue@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.3.1 Resolution: | Keywords: Port: bash-completion | --------------------------------+---------------------- Comment (by Daniel.Lipofsky@…): yes {{{ ~$ echo $PATH /Users/danlip/bin:/opt/appmind/bin:/opt/java7/bin:/opt/local/libexec/gnubin:/opt/local/bin:/opt/local/sbin:/usr/local/mysql/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin ~$ type -all xargs xargs is /opt/local/libexec/gnubin/xargs xargs is /usr/bin/xargs ~$ type -all find find is /opt/local/libexec/gnubin/find find is /usr/bin/find }}} -- Ticket URL: <https://trac.macports.org/ticket/44558#comment:7> MacPorts <http://www.macports.org/> Ports system for OS X
#44558: bash-completion on ssh hostname adds bad function, causes syntax errors --------------------------------+---------------------- Reporter: Daniel.Lipofsky@… | Owner: raimue@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.3.1 Resolution: | Keywords: Port: bash-completion | --------------------------------+---------------------- Comment (by Daniel.Lipofsky@…): also I tried setting my PATH to just "/usr/bin" and I still see the error. -- Ticket URL: <https://trac.macports.org/ticket/44558#comment:8> MacPorts <http://www.macports.org/> Ports system for OS X
#44558: bash-completion on ssh hostname adds bad function, causes syntax errors --------------------------------+---------------------- Reporter: Daniel.Lipofsky@… | Owner: raimue@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.3.1 Resolution: | Keywords: Port: bash-completion | --------------------------------+---------------------- Comment (by larryv@…): Those fancy-pants patterns require `extglob` to be enabled, which bash- completion does automatically when it’s sourced. So something is disabling it. Can you try this immediately after reproducing your problem? {{{ $ bash -c 'shopt -s extglob && /bin/echo foobar' }}} -- Ticket URL: <https://trac.macports.org/ticket/44558#comment:9> MacPorts <http://www.macports.org/> Ports system for OS X
#44558: bash-completion on ssh hostname adds bad function, causes syntax errors --------------------------------+---------------------- Reporter: Daniel.Lipofsky@… | Owner: raimue@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.3.1 Resolution: | Keywords: Port: bash-completion | --------------------------------+---------------------- Comment (by Daniel.Lipofsky@…): unfortunately that doesn't help (it was already set) {{{ $ shopt extglob extglob on ~$ bash -c 'shopt -s extglob && /bin/echo foobar' bash: _scp: line 28: syntax error near unexpected token `(' bash: _scp: line 28: ` !(*:*)/* | [.~]*)' bash: error importing function definition for `_scp' foobar }}} -- Ticket URL: <https://trac.macports.org/ticket/44558#comment:10> MacPorts <http://www.macports.org/> Ports system for OS X
#44558: bash-completion on ssh hostname adds bad function, causes syntax errors --------------------------------+---------------------- Reporter: Daniel.Lipofsky@… | Owner: raimue@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.3.1 Resolution: | Keywords: Port: bash-completion | --------------------------------+---------------------- Comment (by larryv@…): On second thought, that command doesn’t test anything; it’s not `echo` that’s having a problem. I think I know what’s going on. Which startup script do you source bash- completion from? -- Ticket URL: <https://trac.macports.org/ticket/44558#comment:11> MacPorts <http://www.macports.org/> Ports system for OS X
#44558: bash-completion on ssh hostname adds bad function, causes syntax errors --------------------------------+---------------------- Reporter: Daniel.Lipofsky@… | Owner: raimue@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.3.1 Resolution: | Keywords: Port: bash-completion | --------------------------------+---------------------- Comment (by Daniel.Lipofsky@…): I have the following in ~/.bash_profile {{{ if [ -f /opt/local/etc/profile.d/bash_completion.sh ]; then source /opt/local/etc/profile.d/bash_completion.sh fi }}} -- Ticket URL: <https://trac.macports.org/ticket/44558#comment:12> MacPorts <http://www.macports.org/> Ports system for OS X
#44558: bash-completion on ssh hostname adds bad function, causes syntax errors --------------------------------+---------------------- Reporter: Daniel.Lipofsky@… | Owner: raimue@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.3.1 Resolution: | Keywords: Port: bash-completion | --------------------------------+---------------------- Comment (by larryv@…): It looks like the child shells you’re running are inheriting the parent’s bash-completion functions, but they’re not sourcing `bash-completion.sh` itself, which handles necessary setup like enabling `extglob`. (Child shells do not inherit their parents’ options, so all the `bash` invocations you’ve been testing with have `extglob off`.) At a quick glance, it doesn’t look like bash-completion exports its functions to the environment, so I don’t know why your functions are being inherited by child shells. You could try temporarily commenting out everything in your startup scripts except for the bash-completion bit and seeing whether that produces any results. -- Ticket URL: <https://trac.macports.org/ticket/44558#comment:13> MacPorts <http://www.macports.org/> Ports system for OS X
#44558: bash-completion on ssh hostname adds bad function, causes syntax errors --------------------------------+---------------------- Reporter: Daniel.Lipofsky@… | Owner: raimue@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.3.1 Resolution: | Keywords: Port: bash-completion | --------------------------------+---------------------- Comment (by Daniel.Lipofsky@…): Solved: my ~/.bash_profile was sourcing something that was sourcing something that was calling "set -a". It seemed to need it, but I was able to add a "set +a" at the end of my ~/.bash_profile to reverse it, which solved the problem. -- Ticket URL: <https://trac.macports.org/ticket/44558#comment:14> MacPorts <http://www.macports.org/> Ports system for OS X
#44558: bash-completion on ssh hostname adds bad function, causes syntax errors --------------------------------+---------------------- Reporter: Daniel.Lipofsky@… | Owner: raimue@… Type: defect | Status: closed Priority: Normal | Milestone: Component: ports | Version: 2.3.1 Resolution: invalid | Keywords: Port: bash-completion | --------------------------------+---------------------- Changes (by larryv@…): * status: new => closed * resolution: => invalid Comment: Great! -- Ticket URL: <https://trac.macports.org/ticket/44558#comment:15> MacPorts <http://www.macports.org/> Ports system for OS X
participants (1)
-
MacPorts