Question SSH client et remplacements d'invite de commande


Le problème

J'ai travaillé exclusivement sous Windows. Je peux gérer ça.

J'ai travaillé exclusivement sous DOS (il y a longtemps!). Je peux gérer ça.

J'ai travaillé exclusivement sous Unix. Je peux gérer ça.

En ce moment, je développe une application en ligne de commande (python) sur une machine Windows, en la testant dans une boîte de dialogue DOS (par exemple, invite de commandes Windows), puis en la déployant sous Linux et en l'exécutant avec PuTTY.

Je ne peux pas gérer ça.

Ma productivité diminue considérablement lorsque CTRL-C coupe dans une fenêtre (Windows) et tue le processus dans un autre (DOS, Linux).

Ma productivité diminue considérablement lorsque Entrée copie la sélection dans une fenêtre (DOS) et supprime la sélection dans une autre (Windows), et exécute la commande en cours de modification dans le troisième (PuTTY).

Ma productivité diminue considérablement lorsque je ne peux pas appuyer sur Annuler, Début ou Fin.

La solution que je cherche

Un client de ligne de commande SSH / Bash qui s'exécute sous Windows et utilise, dans la mesure du possible, tous les raccourcis Windows standard (Couper, Copier, Coller, Annuler, Accueil, Fin, Insérer, Maj-Flèches, etc.) fonctionnent sur un ligne de commande bash. Des points bonus si cela place le curseur entre les lettres plutôt que sur celles-ci. Plus, un drop-in de ligne de commande DOS équivalent qui fonctionne sous Windows et fournit la même interface.

J'apprécie le fait que des boutons spéciaux soient nécessaires pour transférer les codes CTRL (comme CTRL-C) dans les cas où j'en ai besoin.

Je soupçonne que le client SSH devra être spécifique à un shell (il sait donc quand il se trouve à l'invite de commande et quand il est dans une application en cours d'exécution).

Je sais qu'il y en a beaucoup Clients SSH, mais je recherche des conseils pour un besoin particulier. PuTTY ressemble à une voie d'évasion pour les programmeurs Unix bloqués sur Windows. Je suis le contraire

Quelqu'un peut-il en recommander un (ou peut-être une combinaison d'un client SSH et d'un remplacement par ligne de commande)?

Mise à jour: Après avoir vu les premières réponses ici, j'ai transformé mes exigences en article de blog, ce qui peut donner plus de contexte dans la direction que je regarde.


2
2018-06-09 04:14


origine




Réponses:


pour le travail terminal j'utilise 'à la menthe"qui peut être utilisé dans le cadre du"cygwin' paquet. alors, évidemment, je lance un "vrai" shell (zsh dans mon cas), bien que powershell ne soit pas si mauvais (la partie mauvaise est vraiment la fenêtre du terminal, elle est horrible).

  • vous pouvez lancer cmd.exe depuis bash / zsh
  • vous avez ssh en cygwin
  • vous pouvez changer la façon dont le curseur ressemble à la menthe (il apparaît donc comme un | plutôt qu'un bloc)
  • vous pouvez marquer le texte comme dans xterm et avec ctrl + clic gauche vous pouvez lancer une application appropriée sur ce texte marqué (disons que vous marquez http://superuser.com et ctrl + clic gauche -> un navigateur démarre, si vous avez sélectionné C: \ Windows l'explorateur se déclenche, etc.)

la seule autre façon de le faire est de développer directement sur le serveur distant via une session ssh, en utilisant un éditeur décent (vim vient à l’esprit).


2
2018-06-09 05:18



Powershell a un langage plus puissant, mais l'éditeur est aussi mauvais que Shell de commande. J'utilise parfois un éditeur distant (emacs plutôt que vim, mais n'y allons pas) et cela ne fait qu'aggraver le problème. La plupart de mes modifications sont effectuées dans des dizaines d'autres applications qui acceptent les raccourcis Windows (comme le navigateur que j'utilise actuellement). Soudain CTRL + V pour coller rend la page emacs vers le bas. :-( - Oddthinking
Qu'en est-il de "shift + insert"? - akira
@ Akira, j'ai lu le manuel de la Monnaie, pour voir si je devais accepter cette réponse. J'ai vu le Shift + Insert, et peut-être il y a 15 ans, lorsque j'utilisais encore ce raccourci, j'en aurais été satisfait, mais ces jours-ci, ce serait probablement aussi frustrant que PuTTY. Je vais peut-être essayer quand même (et j'ai + 1 pour votre réponse). - Oddthinking
@oddthinking: shift + insert .. alimente ça en emacs? au moins cette douleur disparaît? - akira
@akira, la différence entre l'apparence (emacs basée sur le terminal) et l'apparence Windows est plus que quelques raccourcis clavier. Ils ont des différences fondamentales dans la façon dont ils traitent les tampons et le texte. En tout cas, la ligne de commande est mon problème (sauf si vous proposez d’exécuter la ligne de commande via emacs?) Je devrais peut-être écrire ma propre solution. Il ne du son trop dur. (Derniers mots célèbres!) - Oddthinking


Cela est difficile en raison des conventions Unix et de la répartition des responsabilités pour la gestion des entrées entre le terminal, le pilote de terminal et le shell. Mais il y a certaines choses que vous pouvez faire.

Comme déjà indiqué, en utilisant mintty, Ctrl + Insert et Shift + Insert copier et coller depuis le presse-papiers Windows. Le terminal ne peut pas couper, car il ne contrôle pas la ligne tampon du shell. Ces raccourcis proviennent du standard IBM User Access (CUA). Ils sont apparus pour la première fois dans les applications DOS et ont été dans Windows dès le début.

Ctrl + X / C / V, quant à lui, provenait du Mac. Sans doute plus commode, mais le gros problème avec l'utilisation de ceux-ci dans un terminal est bien sûr que Ctrl + C est la clé d'interruption, avec beaucoup d'applications l'utilisant pour des choses comme Annuler. De plus, Ctrl + V est la clé standard de «quoted-insert» dans un shell, ce qui supprime toute signification particulière de la touche suivante, et Ctrl + X est la première clé de nombreux raccourcis en deux étapes.

Je ne pense pas qu'il soit possible d'utiliser Shift + flèche pour marquer le texte en bash. Au lieu de cela, vous appuyez sur Ctrl + Espace pour définir la "marque", puis si vous déplacez le curseur, le texte entre la marque et le curseur est sélectionné. Malheureusement, vous ne voyez pas réellement la sélection (appelée "région"), vous devez donc vous rappeler où vous avez placé la marque.

(Zsh fonctionne de la même façon, mais contrairement à bash, il met en évidence la sélection. Le problème d’amélioration 84 pour mintty demande la possibilité de sélectionner du texte à l’aide d’un clavier au niveau terminal.

Maintenant, les raccourcis par défaut pour opérer sur la "région" sont les raccourcis emacs, mais vous pouvez les changer en Mac, en plaçant ce qui suit dans un fichier appelé .inputrc dans votre répertoire personnel. (Lisez tout sur .inputrc à http://www.gnu.org/software/bash/manual/bashref.html#Readline-Init-File)

"\C-x": kill-region
"\C-c": copy-region-as-kill
"\C-v": yank

Mais attendez-vous, qu'en est-il de la signification particulière de ces touches? Eh bien, vous venez de perdre tous les raccourcis en deux étapes de Ctrl + X, vous devrez donc relier ceux dont vous avez réellement besoin. Pendant ce temps, la fonction de Ctrl + V pourrait aller à Ctrl + Q:

"\C-q": quoted-insert

Cela laisse le très important Ctrl + C. C'est en fait géré par le pilote du terminal, vous devrez donc le déplacer ailleurs en utilisant «stty». Mintty a une séquence de contrôle qui permet de modifier le code d'accès Escape pour qu'il puisse être utilisé comme clé d'interruption. Le mettre dans votre script de démarrage bash le fera:

echo $'\e[7728h'
stty intr ^\

Les codes clés de Mintty pour diverses touches spéciales permettent également de modifier certains paramètres stty en style Windows:

  • swtch ^] susp ^] - Pause au lieu de Ctrl + Z pour dormir un processus
  • eof ^^ - Ctrl + Entrée à la place de Ctrl + D pour la fin du fichier
  • werase ^_ - Ctrl + Backspace au lieu de Ctrl + W pour effacer un mot
  • lnext ^q - Ctrl + Q au lieu de Ctrl + V pour l'insertion littérale du caractère suivant

Vous pouvez également supprimer les raccourcis du pilote de terminal pour arrêter (^ S) et démarrer (^ Q) la sortie, qui ne sont pas vraiment utiles, mais qui sont tout à fait susceptibles de créer une confusion:

stty start - stop -

Retour à .inputrc, il y a un tas de raccourcis clavier de style Windows à avoir là:

# Ctrl+Left/Right to move by whole words
"\e[1;5C": forward-word
"\e[1;5D": backward-word

# Ctrl+Backspace/Delete to delete whole words
"\e[3;5~": kill-word
"\C-_": backward-kill-word

# Ctrl+Shift+Backspace/Delete to delete to start/end of the line
"\e[3;6~": kill-line
"\xC2\x9F": backward-kill-line

# Alt-Backspace and Ctrl+Z for undo
"\e\d": undo
"\C-z":undo

Enfin, vous trouverez peut-être les raccourcis suivants utiles. Ils recherchent une ligne dans l’histoire qui commence comme votre ligne actuelle:

# Ctrl-Up/Down for searching command history
"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

1
2018-06-25 06:51



Merci ak2. Ces exemples sont tout au sujet d'essayer de faire le shell lui-même agir comme Windows, ce que je considère comme une cause perdue. Vous avez décrit un certain nombre d'obstacles à surmonter, que je n'avais même pas envisagés, mais cela ne fait que renforcer mon point de vue selon lequel ce n'est pas la bonne façon de parvenir à la cohérence. Au lieu de cela, je recherche une application Windows qui permet de modifier une zone de texte de type Windows, puis envoie le résultat au terminal. - Oddthinking
Je ne pense pas qu'il soit impossible de faire en sorte que l'éditeur de ligne d'un shell se comporte comme Windows et s'intègre avec le presse-papier de Windows. En utilisant l'éditeur de ligne hautement configurable de zsh et le périphérique / dev / clipboard de Cygwin, cela pourrait même être possible sans pirater le shell réel. C'est certes une somme de travail considérable, de même que votre idée de modifier les lignes côté terminal, à moins bien sûr qu'il existe déjà une application de terminal. Les étapes ici, tout en offrant seulement une solution partielle, ont l'avantage considérable que vous pourriez les utiliser aujourd'hui. - ak2


je pense Cygwin fait ce que tu veux ... mais je ne l'ai pas utilisé depuis quelques années. Je vais en fait l'installer dès maintenant pour voir comment ça se passe. Il est un peu excessif d'être utilisé uniquement pour un client ssh.


0
2018-06-09 05:18



Cygwin essaie de faire en sorte qu'un shell DOS ressemble à un shell Unix. J'essaie de créer un shell Unix et un shell DOS comme une application Windows. - Oddthinking
@Oddthinking Ah délicate ... - James T


ok, une autre façon de résoudre votre problème:

éditer les fichiers que vous devez éditer dans un éditeur local et en les écrivant sur "disque" vous les transférez sur le serveur.

options:

  • vim peut le faire via le netrw-plugin (qui fait maintenant partie de la distribution standard, iirc)
  • emacs semble soutenir cette via tramp, mais il semble aussi avoir petit problèmes.
  • configurer un tunnel SSH sur un partage Samba sur la machine distante pour le monter localement
  • Essaie expanddrive ("monte sftp sur votre explorateur")
  • essayer sshfs pour windows via dokan-sshfs.

0
2018-06-11 05:09



Toujours en train de résoudre le mauvais problème, j'ai peur. Je transfère les fichiers via Mercurial via SSH. Je pourrais également utiliser l'une des suggestions ci-dessus. De toute façon, une fois les fichiers transférés, (a) je veux les exécuter et (b) je veux couper et coller les extraits de la sortie. C'est à ce moment que les problèmes commencent - j'ai besoin d'une fenêtre de terminal de ligne de commande. Et j'aimerais en avoir un qui supporte Windows L & F. - Oddthinking