Subject: bug#29149: Tramp shell uses local shell setting in windows

From: Shuguang Sun <[email-masked]>
Date: Sun, 7 Jan 2018 12:52:58 +0800

Hi Michael,

On Sun, Jan 7, 2018 at 2:51 AM, Michael Albinus <[email-masked]>
wrote:

> Shuguang Sun <[email-masked]> writes:
>
> > Dear all,
>
> Hi,
>
> > I have a patch to shell.el and dired-aux.el which
> > 1. to use the tramp-remote-shell and tramp-remote-shell-args (in
> > shell.el)
> > 2. remove the "start /b" in dired-do-shell-command (in dired-aux.el)
>
> Thanks for this! However, I believe we should not use tramp-remote-shell
> and tramp-remote-shell-args in shell.el. The better approach would be to
> use connection-local variables. Have you read the section "Running
> ‘shell’ on a remote host" in the Tramp manual, chapter
> (info "(tramp) Remote processes") ?
>

Here I focus on the connection from Windows local to linux remote

1. For the shell command:
The setting below from 6.5.2 does make the shell command work.
  (connection-local-set-profile-variables
   'remote-bash
   '((explicit-shell-file-name . "/bin/bash")
     (explicit-bash-args . ("-i"))))

It must specify the explicit-shell-file-name. Otherwise, once the code in
function shell trying to set explicit-shell-file-name sill has bugs:
1.1 expand-file-name will add c:/ to the shell-file name because the local
is windows
1.2 the default directory for read-file-name is better to use
(file-remote-p default-directory) "/" than default-directory
"/path/path/..."

Otherwise this part of code is not necessary.

2. 6.5.3 Running ‘shell-command’ on a remote host or other section can't
solve "start /b" issue. It is introduced by dired-do-shell-command (in
dired-aux.el). It checks w32-shell for local environment and then add "start
/b" to the command. However if it is in a tramp dir (e.g. linux server),
the command with "start /b" will be transpose to remote handler. The linux
shell can't understand it.
If Windows to Windows connection will not meet this issue.

> Best regards, Michael.