PowerShell / Win32-OpenSSH

Win32 port of OpenSSH
7.2k stars 739 forks source link

Behavior when executing a batch file with the ssh command #2201

Open makat1983 opened 5 months ago

makat1983 commented 5 months ago

Summary of the new feature / enhancement

Run the batch file with the ssh command in the following way. The batch file contains the cls command, but does not erase the history. Running the same batch file while connected to ssh, cls works.

  1. Create a batch file on the server that does the following

echo test

cls

  1. Execute the following command to run the batch file with the ssh command

ssh user@server "chcp 65001 && C:\path\to\xxx.bat"

3.The result of the batch file execution is returned. cls does not erase the history.

PS C:\Users\makat> ssh user@server "chcp 65001 && C:\path\to\xxx.bat" administrator@home's password: Active code page: 65001

administrator@HOME C:\Users\Administrator>echo test test

administrator@HOME C:\Users\Administrator>cls

PS C:\Users\makat>

I assume that the reason the history does not disappear with the former method is that the results of the batch file executed on the server are returned to the local console of the client. I assume that the history disappears with the latter method because you are establishing an SSH connection and interacting directly with the server shell, so the effect of cls is reflected in the client's console.

Is the former behavior by design? If not, please consider whether it can be changed so that it is the latter behavior.

Proposed technical implementation details (optional)

No response

mgkuhn commented 4 months ago

A note on terminology: the CLS command CLears the Screen (console character output buffer), not the "history". The term "history", in the context of a command-line shell, usually refers to the list of previously entered commands, which you can retrieve if you e.g. press cursor-up at the prompt.

mgkuhn commented 4 months ago

Try running ssh -t ... to force the allocation of a pseudo-terminal even when you are not using ssh interactively.