diff --git a/completions/ssh b/completions/ssh index 7a8a98e0ce0..279c44b040a 100644 --- a/completions/ssh +++ b/completions/ssh @@ -519,7 +519,8 @@ _comp_xfunc_scp_compgen_remote_files() # shellcheck disable=SC2090 _files=$(ssh -o 'Batchmode yes' "$_userhost" \ command ls -aF1dL "$_path*" 2>/dev/null | - command sed -e 's/'"$_comp_cmd_scp__path_esc"'/'"$_escape_replacement"'/g' -e 's/[*@|=]$//g' \ + command sed -e 's/[*@|=]$//g' \ + -e 's/'"$_comp_cmd_scp__path_esc"'/'"$_escape_replacement"'/g' \ -e 's/[^/]$/& /g') fi _comp_compgen -R split -l -- "$_files" @@ -555,8 +556,9 @@ _comp_xfunc_scp_compgen_local_files() else _comp_compgen -RU files split -l -- "$( command ls -aF1dL "${files[@]}" 2>/dev/null | - command sed -e "s/$_comp_cmd_scp__path_esc/\\\\&/g" \ - -e 's/[*@|=]$//g' -e 's/[^/]$/& /g' -e "s/^/${1-}/" + command sed -e 's/[*@|=]$//g' \ + -e "s/$_comp_cmd_scp__path_esc/\\\\&/g" \ + -e 's/[^/]$/& /g' -e "s/^/${1-}/" )" fi } diff --git a/test/t/test_scp.py b/test/t/test_scp.py index 3bfbfff69f2..f47b1e9f05a 100644 --- a/test/t/test_scp.py +++ b/test/t/test_scp.py @@ -3,7 +3,12 @@ import pytest -from conftest import assert_bash_exec, assert_complete, bash_env_saved +from conftest import ( + assert_bash_exec, + assert_complete, + bash_env_saved, + prepare_fixture_dir, +) LIVE_HOST = os.environ.get( "BASH_COMPLETION_TEST_LIVE_SSH_HOST", default="bash_completion" @@ -152,3 +157,28 @@ def test_xfunc_remote_files(self, bash): "shared/default/foo ", "shared/default/foo.d/", ] + + @pytest.fixture + def tmpdir_mkfifo(self, request, bash): + tmpdir, _, _ = prepare_fixture_dir(request, files=[], dirs=[]) + + # If the system allows creating a named pipe, we create it in a + # temporary directory and returns the path. We cannot check the + # availability of the named pipe simply by the existence of the command + # "mkfifo" Even if the command "mkfifo" exists in the system, the + # current operating system or the filesystem may not allow creating a + # named pipe. + try: + assert_bash_exec(bash, "mkfifo '%s/local_path_1-pipe'" % tmpdir) + except Exception: + pytest.skip( + "The present system does not allow creating a named pipe through 'mkfifo'." + ) + + return tmpdir + + def test_local_path_mark_1(self, bash, tmpdir_mkfifo): + completion = assert_complete( + bash, "scp local_path_1-", cwd=tmpdir_mkfifo + ) + assert completion == "pipe"