désactivation du contrôle des travaux dans bash (CTRL-Z)

12

Il m'arrive parfois, que j'appuie sur CTRL+ Zpar accident et mon application disparaît en arrière-plan. Je sais, je peux le ramener fg, donc ce n'est pas si grave. Mais je me demande de désactiver cela job controlde toute façon. Dans toute ma vie, je ne me souviens pas d'un cas où j'en avais besoin, il me semble juste comme une relique du passé.

Est-ce correct de désactiver job controlcomplètement? Ou est-ce que je manque quelque chose et cette fonctionnalité peut être utile? Comment pourrais-je le désactiver dans mon.bashrc

METTRE À JOUR:

J'ai essayé set +mcomme suggéré par @Falsenames. Cependant, cela ne fonctionne que lorsque je le tape dans le terminal. L'ajout set +mà mon .bashrcn'a aucun effet.

Martin Vegter
la source
1
Mise à jour: le fait que $-(liste des options actives) ne contient plus mlorsque vous placez set +mdans votre ~/.bashrcsuggère que Bash essaie de désactiver le contrôle des tâches, mais finalement ne le fait pas à cause d'un bug - peut être utile de le signaler via [email protected]
mklement0

Réponses:

8

Vous pouvez ajouter ce qui suit dans votre ligne de commande pour arrêter d'utiliser le mode de surveillance.

set + m

Si vous avez vraiment besoin de la fonctionnalité ctrl-z plus tard, vous pouvez simplement taper «set -m» pour activer la surveillance de cette session.

De l' homme bash . Notez que c'est pour '-m', avec "+ m" basculant ce paramètre pour désactiver.

set [+abefhkmnptuvxBCEHPT] [+o option] [arg ...] 
....
-m
    Monitor mode. Job control is enabled. This option is on by default for interactive
    shells on systems that support it (see JOB CONTROL above). Background processes 
    run in a separate process group and a line containing their exit status is printed
    upon their completion. 

Comme dernier effort, vous souhaiterez peut-être compiler manuellement une version de bash sans l'indicateur "--enable-job-control". Voici un guide d'installation rapide de GNU. Si vous choisissez de suivre cette route, NE remplacez PAS / bin / bash juste au cas où les processus d'arrière-plan exécutés par bash attendent le contrôle des travaux. À la place, créez un fichier /bin/bash.alt ou un autre fichier. Votre shell par défaut peut être changé en celui-ci en exécutant usermod ou en éditant / etc / passwd en tant que root.

Falsenames
la source
set +mfonctionne dans le terminal, mais quand je l'ajoute à mon .bashrc, cela n'a aucun effet.
Martin Vegter
Ah, tu as raison. C'est localisé au script spécifique à ce point. Puis bash affirme ses valeurs par défaut.
Falsenames
compiler ma propre bash semble un prix assez élevé à payer pour désactiver le contrôle des tâches. Il doit y avoir un paramètre qui fonctionne via .bashrc.
Martin Vegter
Comme tout est défini au moment de la compilation, il n'est pas nécessaire qu'il y ait un moyen de le changer dans un fichier d'installation qui se charge après le démarrage du shell. Le problème ici est que quelqu'un a décidé de compiler bash AVEC le contrôle des travaux activé par défaut pour la distribution que vous utilisez. Je ne peux pas vraiment m'opposer personnellement à cela, car j'utilise divers contrôles de l'emploi tous les jours au travail, et je ne suis pas sûr de pouvoir m'adapter facilement à la vie sans cela. Certes, c'est mon expérience, pas la vôtre ... c'est pourquoi il y a des indicateurs sur la compilation, pour donner des options.
Falsenames
4

stty susp undefdésactivera le signal de suspension lancé par le clavier pour la plupart des programmes, cependant les commandes comme vimet emacsqui ont des liaisons spécifiques pour Ctrl-Zdevront être reconfigurées individuellement.

Vous pouvez ajouter cette commande stty à votre ~/.bash_profileou ~/.profile, déconnectez-vous, reconnectez-vous.

Mark Plotnick
la source
cela fonctionne en fait pour certains programmes. Mais par exemple, mccela ne fonctionne pas. Ce qui confirme essentiellement ce que vous avez dit. N'existe-t-il pas de solution universelle qui fonctionne pour tous?
Martin Vegter
Je viens de remarquer, set +mfonctionne pour mc, mais seulement si je le tape dans le terminal, pas dans .bashrcou .profile.
Martin Vegter
3

Ou est-ce que je manque quelque chose et cette fonctionnalité peut être utile?

Pour répondre à cette partie de la question: Cz / fgcombo est essentiel à mon workflow vim. Par exemple, je préfère Cz> git commit> fgà l' aide d' emballages git à l' intérieur vim.

Cz aide à traiter le shell comme IDE, conformément au principe " do one thing ". (Ceci au lieu de "éditeur comme IDE").

denten
la source
1
^Zest absolument toujours utile - mais c'était encore plus utile quand un terminal n'était pas une fenêtre, mais une boîte devant vous. Et vous n'en aviez qu'un.
Volker Siegel
2

Ajoutez trap "" SIGTSTPvotre script. Il captera le signal et l'ignorera.

#!/bin/bash
trap "" SIGTSTP
watch date
où23
la source