Créer un shell personnalisé - c ++, linux, bash, shell, unix

J'ai créé un shell personnalisé en C ++. Actuellement, le shell est conçu comme une boucle while infinie qui est démarrée en exécutant l'exécutable correspondant depuis le terminal (j'utilise Ubuntu comme système d'exploitation). Le shell implémente quelques nouvelles commandes qui sont chacune stockées en tant qu'exécutables distincts dans le système de fichiers. Le reste des commandes saisies par l'utilisateur est exécuté directement à l'aide du execve() fonction wrapper.

Donc, essentiellement, j'exécute toutes les commandes utilisateur en utilisant la fonction execve (): les commandes personnalisées sont stockées en tant qu'outils distincts et sont "execed "en fournissant le chemin de l'exécutable alors que toute autre commande unix" standard "est directement execed.

Au lieu de l'exécuter en tant qu'exécutable distinct de bash, Je veux faire en sorte que l'utilisateur utilise mon shell cette s'exécute sur le terminal. Comment puis je faire ça?

J'ai fait référence aux liens suivants:

Processus et sessions et contrôle des terminaux

Créer un shell UNIX

Cependant, je suis incapable de comprendre les liens comme l'association entre un terminal de contrôle et le shell, etc. Toute aide serait appréciée à cet égard.

METTRE À JOUR:

Cela peut sembler un peu illogique mais:

Est-il possible de l'implémenter comme une commande utilisateur que l'utilisateur peut exécuter à partir du shell actuel? Je sais qu'il existe une commande appelée chsh ... mais est-ce que cela fonctionnera avec mon shell?

Réponses:

1 pour la réponse № 1

Tout d'abord, vous pouvez tester votre shell à partir de bash avec exec yourshell. Ce remplace le processus bash avec votre shell entièrement. (Lorsque vous quittez votre shell, le terminal quitte / se déconnecte avec lui.)

Vous pouvez aussi courir xterm -e yourshell démarrer un xterm avec votre shell au lieu de bash.

Si vous voulez en faire de manière permanente votre shell par défaut:

  1. Ajoutez votre shell à la liste des shells du système, /etc/shells
  2. Changez le shell de connexion de votre utilisateur avec chsh
  3. Déconnectez-vous et à nouveau

Le plus populaire