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. 🙂
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"'
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.