Comment avoir un historique de commandes distinct pour différentes sessions pour le même utilisateur?

8

Je fais face à ce problème sur certains des serveurs Unix. Lorsque j'ouvre une session différente pour le même utilisateur, l'historique des commandes est partagé par toute la session. Cela crée des problèmes si, par erreur, j'appuie sur Ctrl-Pou up arrowet j'appuie simplement sur Entrée. Une fois, j'ai fini par courir rm -rf *heureusement, j'étais dans un répertoire où je n'ai pas les autorisations pour supprimer des fichiers.

Comment avoir un historique de commandes distinct pour différentes sessions pour le même utilisateur? La plupart du temps, j'utilise des shells ksh et tcsh.

Hemant
la source

Réponses:

8

De la faq ksh :

Q1. Comment obtenir des fichiers d'historique séparés pour le shell?

A1. ksh utilise un fichier d'historique partagé pour tous les shells qui utilisent le même nom de fichier d'historique. Cela signifie que les commandes entrées dans une fenêtre seront vues par des shells dans d'autres fenêtres. Pour obtenir des fenêtres distinctes, la variable HISTFILE doit être définie sur un nom différent avant la création de la première commande d'historique.

l'autre reçoit
la source
11

Vous pouvez ajouter HISTFILE=~/.hist$$à votre .profile. Cela devrait générer un fichier unique par session.

Vous vous retrouverez avec un grand nombre de .hist*donc je vous suggère de les supprimer de temps en temps.

Gert
la source
2

Je suppose que vous parlez de sessions simultanées; séparer les sessions qui se suivent n'est pas très utile: vous ne pourrez plus utiliser son historique, car toutes les sessions seraient uniques. Si tel était le cas, vous feriez probablement mieux de désactiver l'historique des commandes.

Si nous parlons de séparer la session simultanée, je vous recommande d'utiliser Bash. Je suis sûr que je ne reçois pas l'historique des commandes de deux sessions simultanées mélangées avec lui. Bash écrit uniquement l'historique .bash_historyà la déconnexion, de sorte que l'historique des commandes ne sera pas mélangé avant la déconnexion. À condition que l'utilisation de Bash soit acceptable, cela résoudrait-il votre problème?

wzzrd
la source
Merci pour votre réponse. Je travaille sur HP-UX et son bash n'est pas installé et je n'ai pas la permission de l'installer :(.
Hemant
1

J'ajouterai quelque chose à la réponse de Gert.

Gert's

Vous pouvez ajouter HISTFILE = ~ / .hist $$ à votre .profile. Cela devrait générer un fichier unique par session.

Mien

Vous pouvez supprimer ces fichiers automatiquement en ajoutant les éléments suivants.

trap 'rm ${HISTFILE}' exit

Robert Jacobs
la source
2
Soyez un peu circonspect au sujet des pièges de sortie - le shell ne les empile pas comme vous pourriez l'espérer - donc tout autre réglage d'un piège de sortie écrasera tous les précédents. J'ai écrit un stacker pour les pièges, mais il a presque fait sauter tous les fusibles mentaux que j'avais.
david collier
-1

Vous pouvez utiliser l' écran . J'ai également fait une variable qui a été définie par mon profil konsole et j'ai donné à chacune des sessions un fichier historique différent , seulement des façons dont je peux penser.

xénoterracide
la source
Je ne peux pas installer d'écran. ce n'est même pas compilé sur mon serveur.
Hemant
Je ne sais pas comment l'écran vous donnerait cette capacité de toute façon
Michael Mrozek
@Michael vous pouvez avoir différentes sessions avec l'écran et l'écran a sa propre histoire. Je ne sais pas que quelqu'un m'a dit de résoudre mon problème d'écran ... Je n'aimais pas l'écran. boiteux que cela ait été abaissé lorsque ma deuxième réponse est essentiellement la même que les autres qui ont été améliorées. @Hemant ... et j'étais censé le savoir? Je n'utilise pas d'écran pour le faire sur mon système. Je sais juste que cela permet un effet similaire bien fait.
xenoterracide
Je pense que je sais ce que vous décrivez, mais ce n'est pas une fonction d'écran, c'est juste un effet secondaire du fonctionnement des coques. Si vous ouvrez deux shells, les commandes saisies dans l'une n'apparaîtront pas dans l'historique de l'autre à moins que le shell ne le prenne spécifiquement en charge (par exemple, ZSH le fait, mais vous devez l'activer explicitement). Il ne conserve pas d'histoires distinctes, ils écrivent tous les deux dans le fichier d'historique principal, vous ne pouvez tout simplement pas voir les changements de chaque shell car généralement les shells ne vérifient pas les modifications du fichier d'historique une fois qu'ils ont été chargés
Michael Mrozek
@MichaelMrozek Le shell korn a un historique partagé pour toutes les fenêtres, cela ne peut pas être désactivé. L'utilisation screenn'aidera pas du tout.
FUZxxl