Comment faire pour que GNU Screen ouvre une nouvelle fenêtre dans le répertoire de travail CURRENT?

Par défaut, lorsque vous créez une nouvelle fenêtre dans GNU Screen, celle-ci démarre dans le répertoire où l’écran est appelé. Je veux commencer une nouvelle fenêtre dans GNU Screen dans le répertoire de travail actuel de la fenêtre dans laquelle je suis actuellement. Comment faire cela? Merci!

Voir la commande chdir screen chdir . Toutes les nouvelles fenêtres créées à l’écran l’utilisent comme répertoire initial. En utilisant cela, vous pouvez faire quelque chose comme

 chdir /home/dan/newscreendir screen 

Et votre nouvelle fenêtre (ainsi que les futures fenêtres créées) seront dans le répertoire défini. Si c’est toujours le screenrc de travail actuel, vous pourrez peut-être configurer quelque chose dans votre screenrc pour le faire en une seule commande.

Voir la page de manuel de gnu, c’est assez complet.

Écran de commande chdir

Screen ne peut pas accéder à votre variable shell ni exécuter des commandes backticked. Le plus proche possible de le faire en un clic est avec un petit script bash comme celui-ci

 screen -X setenv currentdir `pwd` screen -X eval 'chdir $currentdir' screen 

ou plus compactement

 screen -X eval "chdir $PWD" 

screen -X envoie la commande à la session d’écran en cours d’exécution. La première ligne crée une variable appelée currentdir . La deuxième ligne envoie le currentdir à la commande chdir , puis crée une nouvelle fenêtre d’écran.

La solution simple consiste à mettre les chaînes suivantes dans votre ~ / .screenrc, puis à nous Cx pour ouvrir de nouvelles fenêtres:

lier ^ x

bind ^ x stuff “écran -X chdir \ $ PWD; écran ^ M”

http://www.michaelkelleher.info a plus de conseils pour les utilisateurs d’écrans intermédiaires / avancés.

Comme ce site semble avoir disparu, vous pouvez en trouver les archives ici: Site personnel de Michael Kelleher sur Archive.org

Je n’ai trouvé aucune solution qui fonctionnerait lorsque vous avez déjà un processus en cours d’exécution dans une fenêtre, alors j’ai trouvé ma propre idée. J’ai ajouté les lignes suivantes à mon fichier .bash_profile:

 scr_cd() { cd $1 screen -X chdir $PWD } if [ "$TERM" == 'screen' ]; then alias cd=scr_cd fi 

Le répertoire de travail de l’écran est mis à jour chaque fois que vous modifiez un répertoire. Quelqu’un peut ne pas aimer cette approche, mais cela fonctionne comme un charme.

Ceci est peut-être spécifique à Byobu, mais la simple saisie de l’ screen ouvre une nouvelle fenêtre dans le répertoire en cours.

Vous pouvez également exécuter:

 screen -X eval "chdir $(pwd)" 

Ou si vous voulez démarrer une nouvelle fenêtre dès que vous définissez chdir, utilisez:

 screen -X eval "chdir $(pwd)" screen 

Pour que l’écran ouvre un nouvel onglet / fenêtre dans le répertoire actuel, vous pouvez append le code suivant à votre fichier .screenrc :

 bind c stuff "screen bash^M" 

Cela entraînera la commande Ctrl + a c pour ouvrir de nouveaux tabs / fenêtres dans le répertoire de la fenêtre / onglet en cours.

Remarque: vous devez vous assurer que l’ screen ne démarre pas un shell de connexion par défaut, car cela entraînera le démarrage du shell dans le répertoire par défaut d’un shell de connexion plutôt que du répertoire actuel. Cela signifie que dans votre fichier .screenrc , votre commande shell ne peut pas inclure de caractère tiret (‘-‘).

Par exemple, c’est faux (c.-à-d. Qu’il va démarrer un shell de connexion):

 shell -$SHELL 

Mais c’est correct (c.-à-d. Qu’il ne démarrera pas un shell de connexion):

 shell $SHELL 

Note 2: Malheureusement, cette méthode ne se comporte pas exactement comme la nouvelle commande de fenêtre / onglet par défaut à l’ screen . Au lieu de cela, il écrit la commande dans la fenêtre en cours et l’exécute pour créer la nouvelle fenêtre / le nouvel onglet, de sorte qu’il ne fonctionnera pas pendant un long processus de shell. En d’autres termes, ce raccourci clavier ne peut être exécuté que lorsque des commandes shell normales peuvent être exécutées.

Remarque 3: Si vous souhaitez que l’ screen ouvre de nouvelles fenêtres / tabs dans le répertoire en cours et ouvre un shell de connexion , vous pouvez append le code suivant à votre fichier .screenrc :

 bind c stuff "screen bash -l^M" 

Dans votre .screenrc mettez une ligne qui utilise la commande chdir si vous voulez le même chaque fois.

Si vous avez une session d’écran en cours dans cette session, vous pouvez taper:

 screen -X chdir [arg] 

Sans argument, ce sera votre répertoire personnel, le même résultat que si vous tapez cd .

Si vous avez un script (il s’agit d’un site de programmation q & a) ou si vous êtes en dehors de l’écran et que l’écran est en cours d’exécution, vous pouvez émettre:

 `which screen` -x -X chdir [arg] 

Ce que vous suivrez probablement avec l’exécution d’un nouveau processus à l’écran avec:

 `which screen` -x -X screen [command to run in that dir] [args for the command] 

Je n’ai pas encore trouvé le moyen de découvrir ce que c’était et de le changer (dans un script), donc si quelqu’un souhaite mettre à jour cette réponse avec cela, veuillez le faire.

J’ai une solution quasi parfaite pour bash. 🙂

  1. Si vous n’utilisez jamais le password de password pour définir le mot de passe lockscreen, ajoutez-le simplement à $HOME/.bash_profile :

     export PROMPT_COMMAND='screen -p $WINDOW -X chdir "$PWD"' 
  2. Besoin d’un mot de passe? avec ça:

     # the digest of password "abc" is ID1wIq4l2t7s6 export PROMPT_COMMAND='screen -p $WINDOW -X eval "password none" "chdir \"$PWD\"" "idle 0 password ID1wIq4l2t7s6"' 

Espérons que les développeurs d’écrans ajoutent la variable d’environnement PWD plus rapidement possible.