[{"data":1,"prerenderedAt":588},["ShallowReactive",2],{"\u002Fnext\u002Fadministrer\u002Fexploitation\u002Fbench\u002Fcompletions":3,"section:\u002Fnext\u002Fadministrer\u002Fexploitation\u002Fbench\u002Fcompletions":587},{"id":4,"title":5,"body":6,"description":571,"extension":572,"meta":573,"navigation":194,"path":583,"seo":584,"stem":585,"__hash__":586},"docs\u002F2.next\u002F5.administrer\u002F03.exploitation\u002F1.bench\u002F2.completions.md","Complétion automatique du shell (bench completions)",{"type":7,"value":8,"toc":559},"minimark",[9,14,32,47,52,87,91,96,99,120,127,157,160,164,167,212,219,247,250,319,325,329,333,373,379,474,478,514,535,539,555],[10,11,13],"h1",{"id":12},"complétion-automatique-du-shell","Complétion automatique du shell",[15,16,17,18,22,23,27,28,31],"p",{},"La commande ",[19,20,21],"code",{},"bench completions"," génère un script de complétion statique pour votre shell (bash ou zsh). Une fois activée, appuyer sur la touche ",[24,25,26],"kbd",{},"Tab"," dans votre terminal suggère automatiquement les commandes et options disponibles pour ",[19,29,30],{},"bench",".",[33,34,37],"callout",{"color":35,"icon":36},"blue","i-heroicons-information-circle",[15,38,39,40,43,44,46],{},"Cette commande remplace l'ancien fichier ",[19,41,42],{},"completion.sh"," qui nécessitait un démarrage Python complet à chaque appui sur ",[24,45,26],{}," (~1 seconde). Le nouveau script généré est entièrement statique : la complétion s'exécute en pur bash, sans lancer Python (~1 ms).",[48,49,51],"h2",{"id":50},"prérequis","Prérequis",[53,54,55,77,80],"ul",{},[56,57,58,59,66,67,69,70,73,74,31],"li",{},"Une version de ",[60,61,65],"a",{"href":62,"rel":63},"https:\u002F\u002Fgitlab.com\u002Fdokos\u002Fdocli",[64],"nofollow","docli"," qui contient la commande. ",[19,68,21],{}," est sur la branche ",[19,71,72],{},"develop"," de docli depuis avril 2026, et la complétion des chemins depuis juillet 2026. Aucune version publiée ne les contient encore : la dernière, v2.9.2 (février 2026), ne les a pas. Pour vérifier, lancez ",[19,75,76],{},"bench completions --help",[56,78,79],{},"Le shell bash ou zsh.",[56,81,82,83,86],{},"Pour compléter aussi les commandes des applications (",[19,84,85],{},"bench --site … migrate",", etc.), lancez la commande depuis le dossier du bench.",[48,88,90],{"id":89},"utilisation","Utilisation",[92,93,95],"h3",{"id":94},"mode-interactif","Mode interactif",[15,97,98],{},"Lancez la commande sans argument depuis votre répertoire bench :",[100,101,106],"pre",{"className":102,"code":103,"language":104,"meta":105,"style":105},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bench completions\n","bash","",[19,107,108],{"__ignoreMap":105},[109,110,113,116],"span",{"class":111,"line":112},"line",1,[109,114,30],{"class":115},"sBMFI",[109,117,119],{"class":118},"sfazB"," completions\n",[15,121,122,123,126],{},"La commande détecte votre shell avec la variable ",[19,124,125],{},"SHELL",". Elle demande ensuite :",[128,129,130,141,150],"ol",{},[56,131,132,133,136,137,140],{},"le fichier du script de complétion (par défaut ",[19,134,135],{},"~\u002F.config\u002Fbench\u002Fcompletion.bash"," ou ",[19,138,139],{},"~\u002F.config\u002Fbench\u002Fcompletion.zsh",") ;",[56,142,143,144,136,147,140],{},"le fichier de configuration du shell (par défaut ",[19,145,146],{},"~\u002F.bashrc",[19,148,149],{},"~\u002F.zshrc",[56,151,152,153,156],{},"la confirmation d'ajouter la ligne ",[19,154,155],{},"source"," dans ce fichier.",[15,158,159],{},"Si la ligne est déjà présente, la commande ne l'ajoute pas une deuxième fois.",[92,161,163],{"id":162},"mode-non-interactif","Mode non interactif",[15,165,166],{},"Passez directement le flag correspondant à votre shell :",[100,168,170],{"className":102,"code":169,"language":104,"meta":105,"style":105},"# Pour zsh\nbench completions --zsh\n\n# Pour bash\nbench completions --bash\n",[19,171,172,178,189,196,202],{"__ignoreMap":105},[109,173,174],{"class":111,"line":112},[109,175,177],{"class":176},"sHwdD","# Pour zsh\n",[109,179,181,183,186],{"class":111,"line":180},2,[109,182,30],{"class":115},[109,184,185],{"class":118}," completions",[109,187,188],{"class":118}," --zsh\n",[109,190,192],{"class":111,"line":191},3,[109,193,195],{"emptyLinePlaceholder":194},true,"\n",[109,197,199],{"class":111,"line":198},4,[109,200,201],{"class":176},"# Pour bash\n",[109,203,205,207,209],{"class":111,"line":204},5,[109,206,30],{"class":115},[109,208,185],{"class":118},[109,210,211],{"class":118}," --bash\n",[15,213,214,215,218],{},"Ajoutez ",[19,216,217],{},"--yes"," pour confirmer automatiquement la modification du fichier de configuration sans invite :",[100,220,222],{"className":102,"code":221,"language":104,"meta":105,"style":105},"bench completions --zsh --yes\nbench completions --bash --yes\n",[19,223,224,236],{"__ignoreMap":105},[109,225,226,228,230,233],{"class":111,"line":112},[109,227,30],{"class":115},[109,229,185],{"class":118},[109,231,232],{"class":118}," --zsh",[109,234,235],{"class":118}," --yes\n",[109,237,238,240,242,245],{"class":111,"line":180},[109,239,30],{"class":115},[109,241,185],{"class":118},[109,243,244],{"class":118}," --bash",[109,246,235],{"class":118},[15,248,249],{},"Autres options :",[251,252,253,266],"table",{},[254,255,256],"thead",{},[257,258,259,263],"tr",{},[260,261,262],"th",{},"Option",[260,264,265],{},"Effet",[267,268,269,280,293,306],"tbody",{},[257,270,271,277],{},[272,273,274],"td",{},[19,275,276],{},"--path \u003Cfichier>",[272,278,279],{},"Écrit le script de complétion dans ce fichier",[257,281,282,287],{},[272,283,284],{},[19,285,286],{},"--rc-file \u003Cfichier>",[272,288,289,290,292],{},"Ajoute la ligne ",[19,291,155],{}," dans ce fichier de configuration",[257,294,295,300],{},[272,296,297],{},[19,298,299],{},"--skip-rc",[272,301,302,303,305],{},"Écrit le script sans modifier le fichier de configuration. La commande affiche la ligne ",[19,304,155],{}," à ajouter.",[257,307,308,316],{},[272,309,310,312,313],{},[19,311,217],{},", ",[19,314,315],{},"-y",[272,317,318],{},"Ne demande pas de confirmation avant de modifier le fichier de configuration",[15,320,321,322,324],{},"Après une mise à jour de bench ou l'installation d'une application, relancez ",[19,323,21],{}," pour mettre à jour la liste des commandes.",[48,326,328],{"id":327},"ce-que-fait-la-commande","Ce que fait la commande",[330,331,332],"mermaid",{},"\nflowchart TD\n    A[bench completions] --> B[Parcours de l'arbre de commandes bench]\n    B --> C{Bench Python disponible ?}\n    C -- Oui --> D[Sous-processus unique : collecte JSON via get_app_groups]\n    C -- Non \u002F ancienne version --> E[Fallback : BFS parallèle via --help]\n    D --> F[Génération du script statique bash ou zsh]\n    E --> F\n    F --> G[Ajout de la ligne source dans le fichier rc]\n    G --> H[Complétion disponible au prochain terminal]\n",[128,334,335,345,355,367],{},[56,336,337,341,342,344],{},[338,339,340],"strong",{},"Collecte des commandes"," — ",[19,343,21],{}," parcourt l'arbre Click de bench pour lister toutes les commandes et options natives.",[56,346,347,350,351,354],{},[338,348,349],{},"Introspection des applications"," — Si vous êtes dans un bench contenant des applications Frappe\u002FDodock, un seul sous-processus est lancé pour charger Frappe et récupérer toutes les commandes des applications installées (via ",[19,352,353],{},"get_app_groups()","). Cette opération prend environ 1 à 2 secondes, quel que soit le nombre d'applications.",[56,356,357,360,361,363,364,31],{},[338,358,359],{},"Fallback BFS"," — Pour les versions de Frappe antérieures qui n'exposent pas ",[19,362,353],{},", la commande utilise une exploration parallèle des sorties ",[19,365,366],{},"--help",[56,368,369,372],{},[338,370,371],{},"Script statique"," — Le résultat est un script bash ou zsh. La complétion au moment de la frappe ne lance aucun processus Python.",[48,374,376,377],{"id":375},"comparaison-avec-lancien-completionsh","Comparaison avec l'ancien ",[19,378,42],{},[251,380,381,397],{},[254,382,383],{},[257,384,385,388,393],{},[260,386,387],{},"Critère",[260,389,390,392],{},[19,391,42],{}," (supprimé)",[260,394,395],{},[19,396,21],{},[267,398,399,410,421,431,443,462],{},[257,400,401,404,407],{},[272,402,403],{},"Coût par appui sur Tab",[272,405,406],{},"~1 s (démarrage Python)",[272,408,409],{},"~1 ms (pur bash)",[257,411,412,415,418],{},[272,413,414],{},"Compatible Click 8",[272,416,417],{},"Non",[272,419,420],{},"Oui",[257,422,423,426,429],{},[272,424,425],{},"Fonctionne hors répertoire bench",[272,427,428],{},"Non (chemin codé en dur)",[272,430,420],{},[257,432,433,439,441],{},[272,434,435,436],{},"Effet de bord ",[19,437,438],{},"cd",[272,440,420],{},[272,442,417],{},[257,444,445,448,459],{},[272,446,447],{},"Outils externes requis",[272,449,450,312,453,312,456],{},[19,451,452],{},"ls",[19,454,455],{},"cut",[19,457,458],{},"xargs",[272,460,461],{},"Aucun",[257,463,464,467,470],{},[272,465,466],{},"Installation",[272,468,469],{},"Source manuelle",[272,471,472],{},[19,473,21],{},[48,475,477],{"id":476},"compléter-les-chemins-de-fichiers","Compléter les chemins de fichiers",[15,479,480,481,312,484,312,487,312,490,136,493,496,497,312,500,136,503,506,507,509,510,513],{},"La complétion propose aussi les fichiers et dossiers pour les options et arguments qui attendent un chemin. Ce sont les paramètres de type chemin, et ceux dont le nom contient ",[19,482,483],{},"path",[19,485,486],{},"file",[19,488,489],{},"sql",[19,491,492],{},"certificate",[19,494,495],{},"clone_from",". Par exemple : l'argument de ",[19,498,499],{},"restore",[19,501,502],{},"backup --backup-path",[19,504,505],{},"data-import --file",". Appuyez sur ",[24,508,26],{}," après le début du chemin. Un chemin qui commence par ",[19,511,512],{},"~"," part de votre dossier personnel.",[100,515,517],{"className":102,"code":516,"language":104,"meta":105,"style":105},"bench --site dokompany.fr restore ~\u002Fsauvegardes\u002F[Tab]\n",[19,518,519],{"__ignoreMap":105},[109,520,521,523,526,529,532],{"class":111,"line":112},[109,522,30],{"class":115},[109,524,525],{"class":118}," --site",[109,527,528],{"class":118}," dokompany.fr",[109,530,531],{"class":118}," restore",[109,533,534],{"class":118}," ~\u002Fsauvegardes\u002F[Tab]\n",[48,536,538],{"id":537},"désactivation","Désactivation",[15,540,541,542,545,546,136,548,550,551,554],{},"Pour désactiver la complétion, supprimez la ligne ",[19,543,544],{},"source ..."," ajoutée dans votre fichier ",[19,547,146],{},[19,549,149],{},". Vous pouvez aussi supprimer le script dans ",[19,552,553],{},"~\u002F.config\u002Fbench\u002F",". Ouvrez ensuite un nouveau terminal.",[556,557,558],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":105,"searchDepth":112,"depth":180,"links":560},[561,562,566,567,569,570],{"id":50,"depth":180,"text":51},{"id":89,"depth":180,"text":90,"children":563},[564,565],{"id":94,"depth":191,"text":95},{"id":162,"depth":191,"text":163},{"id":327,"depth":180,"text":328},{"id":375,"depth":180,"text":568},"Comparaison avec l'ancien completion.sh",{"id":476,"depth":180,"text":477},{"id":537,"depth":180,"text":538},"Activez la complétion automatique des commandes bench dans votre terminal bash ou zsh grâce à la commande bench completions.","md",{"reviewed":194,"last_verified":574,"sources":575},"2026-11-02",[576,577,578,579,581],"docli@develop:bench\u002Fcommands\u002Fcompletions.py","docli@develop:bench\u002Fcommands\u002Fcompletion_utils.py","docli@develop:bench\u002Fcommands\u002Ffrappe_spec_collector.py",{"docli bb669de \"feat":580},"bench completions (#1707)\", 2026-04-23",{"docli cf9940d \"feat(completions)":582},"add filesystem path tab completion (#1723)\", 2026-07-16","\u002Fnext\u002Fadministrer\u002Fexploitation\u002Fbench\u002Fcompletions",{"title":5,"description":571},"2.next\u002F5.administrer\u002F03.exploitation\u002F1.bench\u002F2.completions","g72rgPeQyAP0hxYjdur6m9wYMS6nbhJsHu0ou3DM8og",{},1793871714941]