Silence completing scp/sftp/ssh -F '' on bash-4

This fixes a bug under bash-4 where completing:

   scp -F 'spaced  conf' <TAB>

causes `dequote' to yield errors:

    bash: eval: line 1: unexpected EOF while looking for matching `''
    bash: eval: line 2: syntax error: unexpected end of file

The bug occurs because of a bug in bash-4.0, where quoted words are split
unintended, see: http://www.mail-archive.com/bug-bash@gnu.org/msg06095.html

Workaround is now to silence `dequote' in case of errors and wait for bash-4 to
be fixed...
This commit is contained in:
Freddy Vulto 2009-10-04 18:14:16 +02:00
parent 5177db1a58
commit 1be84710d2
3 changed files with 21 additions and 4 deletions

View File

@ -229,7 +229,7 @@ quote_readline()
# This function shell-dequotes the argument
dequote()
{
eval echo "$1"
eval echo "$1" 2> /dev/null
}
# Get the word to complete.

View File

@ -95,7 +95,24 @@ lappend expected doo: gee: hus: ike: jar:
# Append local filenames
lappend expected config known_hosts "spaced\\\\ \\\\ conf"
set dir fixtures/scp
assert_complete_dir $expected "scp -F 'spaced conf' " $dir
#assert_complete_dir $expected "scp -F 'spaced conf' " $dir
set prompt "/$dir/@"
assert_bash_exec "cd $dir" "" $prompt
set cmd "scp -F 'spaced conf' "
send "$cmd\t"
expect -ex "$cmd\r\n"
if {[match_items $expected $test]} {
expect {
-re $prompt { pass "$test" }
-re eof { unresolved "eof" }
}; # expect
} else {
# Expected failure (known bug) because of bash-4 bug in quoted words:
# http://www.mail-archive.com/bug-bash@gnu.org/msg06095.html
if {$bash_versinfo_0 >= 4} {xfail "$test"} {fail "$test"}
}; # if
sync_after_int $prompt
assert_bash_exec "cd \$TESTDIR"
sync_after_int

View File

@ -48,8 +48,8 @@ set expected [get_hosts]
# Hosts `gee', `hus' and `jar' are defined in "./fixtures/scp/spaced conf"
# Hosts `doo' and `ike' are defined in ./fixtures/scp/known_hosts
lappend expected doo gee hus ike jar
set dir fixtures/scp
assert_complete_dir $expected "sftp -F 'spaced conf' " $dir
set dir fixtures/sftp
assert_complete_dir $expected "sftp -F spaced\\ \\ conf " $dir
sync_after_int