Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/09/2015, à 16:52

slash-z

[résolu]: changer le répertoire courant du shell père en sortie de mc

Salut,

Je cherche à rétablir un comportement de midnight commander auquel j'étais habitué sous la distribution que j'utilisais précédemment (mandriva 2008, eh oui je sais ça date un peu).
Il s'agit de faire en sorte qu'après avoir quitté mc, on se retrouve dans le dernier répertoire consulté. Ce que je trouvais bien pratique mais que je n'arrive pas à faire fonctionner jusqu'ici sous kubuntu 14.04

Une fois installé midnight commander qui n'est pas installé d'office, faisons donc un man mc pour voir et intéressons nous à l'option -P:

       -P file, --printwd=file
              Print  the last working directory to the specified file.  This option is not meant to be used directly.  Instead, it's used from a special shell script that automati‐
              cally changes the current directory of the shell to the last directory the Midnight Commander was in.  Source the file  /usr/lib/mc/mc.sh  (bash  and  zsh  users)  or
              /usr/lib/mc.csh (tcsh users) respectively to define mc as an alias to the appropriate shell script.

Voici le code de /usr/lib/mc/mc.sh

# Don't define aliases in plain Bourne shell
[ -n "${BASH_VERSION}${KSH_VERSION}${ZSH_VERSION}" ] || return 0
alias mc='. /usr/lib/mc/mc-wrapper.sh'

OK, il crée un alias sur /usr/lib/mc/mc-wrapper.sh

Pour faire mes tests proprement , j'ai donc copié le script "/usr/lib/mc/mc-wrapper.sh" dans mon répertoire perso et je l'ai renommé MC.sh pour éviter les confusions.

J'ai ensuite rajouté dans le code un echo à un endroit stratégique, voici le code du script modifié:

MC_USER=`id | sed 's/[^(]*(//;s/).*//'`
MC_PWD_FILE="${TMPDIR-/tmp}/mc-$MC_USER/mc.pwd.$$"
/usr/bin/mc -P "$MC_PWD_FILE" "$@"

if test -r "$MC_PWD_FILE"; then
        MC_PWD="`cat "$MC_PWD_FILE"`"
        if test -n "$MC_PWD" && test -d "$MC_PWD"; then
                cd "$MC_PWD"
echo "je suis ici: `pwd`"
        fi
        unset MC_PWD
fi

rm -f "$MC_PWD_FILE"
unset MC_PWD_FILE

Et ça marche, le script m'affiche bien en sortie de mc le nouveau répertoire courant comme attendu, confirmation  que le cd à l'intérieur fonctionne bien.
Mais dans la console, rien n'a bougé, je suis toujours dans le répertoire d'origine avant lancement de mc. Ce qui peut-être logique, l'environnement du père ne peut être modifié par le fils. OK.
Seulement ça ne m'arrange pas ! Et ce n'est vraisemblablement ni le comportement du shell vis à la vis de la commande "cd" sous ma distrib précédente (je n'y avais jamais prêté attention), ni ce qu'avaient prévu les développeurs de midnight commander.

Là je cale un peu. Une idée serait bienvenue.

--------------------
Par ailleurs autre problème idiot, il semble qu'il me manque plein de pages de manuel relatives aux commandes de base en shell.
Par exemple un bête "man cd" me sort un "no manual entry". Etonnant non ?

Et je ne trouve pas quel est le paquet "manpages" à installer avec Muon (je suis désolé, je n'ai pas encore pris le temps de me pencher sur l'utilisation de la commande apt)

Dernière modification par slash-z (Le 08/09/2015, à 08:40)

Hors ligne

#2 Le 08/09/2015, à 00:15

slash-z

Re : [résolu]: changer le répertoire courant du shell père en sortie de mc

OK, j'ai trouvé ma réponse pour le premier point concernant mc.
L'importance de l'alias et le fait que cet alias soit en fait une commande d'inclusion m'avaient échappés.
Ce qui explique aussi le fait que ce script qui n'en est pas réellement un du coup, "wrapper" avait une gueule bizarre avec son absence d'entête.

--------------
Pour ce qui est des pages de manuel manquantes, je n'ai toujours pas trouvé dans quel paquet elles se trouvent.
Ce serait sympa de m'aider. Eventuellement....

Hors ligne

#3 Le 08/09/2015, à 00:51

MicP

Re : [résolu]: changer le répertoire courant du shell père en sortie de mc

Non non, il ne manque aucune page man, c'est simplement une question de contexte : l'interpréteur de commandes.

man builtins

=======
http://www.tldp.org/LDP/abs/html/internal.html

http://www.tldp.org/LDP/abs/html/

http://www.tldp.org/guides.html

http://wiki.bash-hackers.org/doku.php

Dernière modification par MicP (Le 08/09/2015, à 01:04)

Hors ligne

#4 Le 08/09/2015, à 01:14

slash-z

Re : [résolu]: changer le répertoire courant du shell père en sortie de mc

OK super merci à toi !
Par contre, c'est pas d'une très grande lisibilité du coup comparé à une manpage habituelle.
Désolé pour certaines de mes questions qui doivent paraître anachroniques lol

Hors ligne

#5 Le 08/09/2015, à 03:52

MicP

Re : [résolu]: changer le répertoire courant du shell père en sortie de mc

(Je suis avec debian 8.2)

=======
Pour la sortie dans le répertoire correspondant au panneau en cours de Midnight Commander
il suffit de créer un alias dans ton fichier ~/.bash_aliases (voir http://doc.ubuntu-fr.org/alias)
(si le fichier ~/.bash_aliases n'existait pas, il faudra le créer)

alias mc='. /usr/share/mc/bin/mc-wrapper.sh'

=======
NOTE : Le point est un équivalent à la commande source (que tu retrouve au début de la page man des builtins du bash)

. /usr/share/mc/bin/mc-wrapper.sh

est donc équivalent à :

source /usr/share/mc/bin/mc-wrapper.sh

=======
Il y a une aide accessible depuis Midnight Commander, mais il faudrait pouvoir désactiver les touches raccourcis de l'émulateur de terminal (F1, F10, etc), et de l'interface graphique.
Ce problème ne se pose pas dans le cas d'un terminal en mode texte (sans le serveur X) accessibles par Ctr+Alt+F1 (à F6) (retour sous X avec Alt-F7)

=======
Pour plus de lisibilité des manPages , j'ajoute ce qui suit dans mon fichier ~/.bashrc

# =============
# Si la commande "man" est appelée,
#   la commande "env" va être appelée juste avant
#   pour pouvoir prendre en compte les variables
#   qui vont colorer l'affichage de certains mots
# Ensuite seulement la commande "man" sera exécutée.
# Voir les "ANSI Escape sequences", "termcap", "groff"…
man() {
      env \
      LESS_TERMCAP_mb=$(printf "\e[1;31m") \
      LESS_TERMCAP_md=$(printf "\e[1;31m") \
      LESS_TERMCAP_me=$(printf "\e[0m") \
      LESS_TERMCAP_se=$(printf "\e[0m") \
      LESS_TERMCAP_so=$(printf "\e[1;44;33m") \
      LESS_TERMCAP_ue=$(printf "\e[0m") \
      LESS_TERMCAP_us=$(printf "\e[1;32m") \
      man "$@"
}

Pour bien faire, il faudrait d'abord faire un test pour vérifier qu'on est bien dans un terminal capable d'afficher des couleurs.

Dernière modification par MicP (Le 08/09/2015, à 06:58)

Hors ligne

#6 Le 08/09/2015, à 08:39

slash-z

Re : [résolu]: changer le répertoire courant du shell père en sortie de mc

Euh oui merci. J'avais trouvé, voir plus haut. Désolé, c'était peut-être pas assez clair.

Hors ligne

#7 Le 08/09/2015, à 08:45

MicP

Re : [résolu]: changer le répertoire courant du shell père en sortie de mc

J'étais justement en train de m'en rendre compte, et finalement, c'est plutôt moi qui suis un peu perturbé par des soucis perso de santé, du coup, je n'avais pas assez bien lu ton premier message.

Hors ligne

#8 Le 08/09/2015, à 08:54

slash-z

Re : [résolu]: changer le répertoire courant du shell père en sortie de mc

Pas grave Mic. Bon rétablissement alors ! wink

Hors ligne

#9 Le 08/09/2015, à 08:56

MicP

Re : [résolu]: changer le répertoire courant du shell père en sortie de mc

Merci. smile

Dernière modification par MicP (Le 08/09/2015, à 08:56)

Hors ligne