diff --git a/README.md b/README.md new file mode 100644 index 0000000..a3bf3e4 --- /dev/null +++ b/README.md @@ -0,0 +1,61 @@ +# nutools + +nutools est un ensemble d'utilitaires pour faciliter l'utililisation des Unixes, +en particulier Linux, mais aussi MacOS X et Cygwin. + +C'est aussi une librairie de scripts shell réutilisables ([ulib](doc/ulib.md)) +et une librairie de modules python réutilisables (pyulib) + +## Installation + +~~~sh +git clone https://git.univ-reunion.fr/modules/nutools +git checkout develop +cd nutools +./uinst -y +~~~ + +Dans l'exemple ci-dessous, on installe la branche develop, pour avoir toujours +la dernière version des outils. + +Pour mettre à jour, il suffit de mettre à jour le dépôt et de relancer +l'installation +~~~sh +cd nutools +git pull +./uinst -y +~~~ + +Alternative, il est possible de demander à nutools à se mettre à jour avec la +dernière version +~~~sh +update-nutools --develop +~~~ + +## Prérequis + +Python >= 2.3 et GNU Awk sont requis pour que toutes les fonctionnalités soient +supportées. +* Sous Linux, lors de l'installation du package, les meilleurs efforts sont fait + pour que ces packages soient installés. +* Sous MacOSX, il faut installer manuellement Fink, DarwinPorts ou Homebrew + +## Outils + +Chaque outil contient une aide intégrée. Il suffit de lancer l'outil avec +l'argument `--help` pour avoir une aide détaillée. + +* Déploiement d'un répertoire ou d'une archive + * [uinst](doc/tools/uinst): Déploiement local + * [mkusfx](doc/tools/mkusfx): Faire une archive auto-installable avec uinst + * [ruinst](doc/tools/ruinst): Déploiement distant avec uinst + * [runs](doc/tools/runs): Lancer un script avec le protocole RUNS + * [rruns](doc/tools/rruns): Déploiement distant avec runs +* Librairie réutilisable de scripts shell + * [uinc](doc/tools/uinc): Dépliage des inclusions dans un fichier + * [ulibsync](doc/tools/ulibsync): Faire une copie locale pour un projet de ulib et/ou pyulib +* Autres outils + * [udir](doc/tools/udir): Gestion des paramètres d'un répertoire. Ces paramètres sont entre + autres utilisés par uinst et uinc. + +-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary \ No newline at end of file diff --git a/doc/index.md b/doc/index.md deleted file mode 100644 index 2762f05..0000000 --- a/doc/index.md +++ /dev/null @@ -1,35 +0,0 @@ -# Présentation - -nutools est un ensemble d'utilitaires pour faciliter l'utililisation des Unixes, -en particulier Linux, mais aussi MacOS X et Cygwin. - -C'est aussi une librairie de scripts shell réutilisables ([ulib]()) et une -librairie de modules python réutilisables (pyulib) - -# Prérequis - -Python >= 2.3 et GNU Awk sont requis pour que toutes les fonctionnalités soient -supportées. -* Sous Linux, lors de l'installation du package, les meilleurs efforts sont fait - pour que ces packages soient installés. -* Sous MacOSX, il faut installer manuellement Fink, DarwinPorts ou Homebrew - -# Outils - -Chaque outil contient une aide intégrée. Il suffit de lancer l'outil avec -l'argument `--help` pour avoir une aide détaillée. - -* Déploiement d'un répertoire ou d'une archive - * [uinst](tools/uinst): Déploiement local - * [mkusfx](tools/mkusfx): Faire une archive auto-installable avec uinst - * [ruinst](tools/ruinst): Déploiement distant avec uinst - * [runs](tools/runs): Lancer un script avec le protocole RUNS - * [rruns](tools/rruns): Déploiement distant avec runs -* Librairie réutilisable de scripts shell - * [uinc](tools/uinc): Dépliage des inclusions dans un fichier - * [ulibsync](tools/ulibsync): Faire une copie locale pour un projet de ulib et/ou pyulib -* Autres outils - * [udir](tools/udir): Gestion des paramètres d'un répertoire. Ces paramètres sont entre - autres utilisés par uinst et uinc. - --*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary \ No newline at end of file diff --git a/doc/nutools.html b/doc/nutools.html deleted file mode 100644 index d12e25b..0000000 --- a/doc/nutools.html +++ /dev/null @@ -1,17829 +0,0 @@ - - -
- - - - - - - - -<!--{{{--> -<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' /> -<!--}}}--> --
Background: #fff -Foreground: #000 -PrimaryPale: #8cf -PrimaryLight: #18f -PrimaryMid: #04b -PrimaryDark: #014 -SecondaryPale: #ffc -SecondaryLight: #fe8 -SecondaryMid: #db4 -SecondaryDark: #841 -TertiaryPale: #eee -TertiaryLight: #ccc -TertiaryMid: #999 -TertiaryDark: #666 -Error: #f88 --
/*{{{*/ -body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];} - -a {color:[[ColorPalette::PrimaryMid]];} -a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];} -a img {border:0;} - -h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;} -h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];} -h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];} - -.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];} -.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];} -.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];} - -.header {background:[[ColorPalette::PrimaryMid]];} -.headerShadow {color:[[ColorPalette::Foreground]];} -.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];} -.headerForeground {color:[[ColorPalette::Background]];} -.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];} - -.tabSelected {color:[[ColorPalette::PrimaryDark]]; - background:[[ColorPalette::TertiaryPale]]; - border-left:1px solid [[ColorPalette::TertiaryLight]]; - border-top:1px solid [[ColorPalette::TertiaryLight]]; - border-right:1px solid [[ColorPalette::TertiaryLight]]; -} -.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];} -.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];} -.tabContents .button {border:0;} - -#sidebar {} -#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];} -#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];} -#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];} -#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];} -#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];} - -.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];} -.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;} -.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;} -.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]]; - border:1px solid [[ColorPalette::PrimaryMid]];} -.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];} -.wizardFooter {background:[[ColorPalette::PrimaryPale]];} -.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];} -.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid; - border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];} -.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];} -.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid; - border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];} - -.wizard .notChanged {background:transparent;} -.wizard .changedLocally {background:#80ff80;} -.wizard .changedServer {background:#8080ff;} -.wizard .changedBoth {background:#ff8080;} -.wizard .notFound {background:#ffff80;} -.wizard .putToServer {background:#ff80ff;} -.wizard .gotFromServer {background:#80ffff;} - -#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];} -#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;} - -.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];} - -.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];} -.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;} -.popup li.disabled {color:[[ColorPalette::TertiaryMid]];} -.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;} -.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;} -.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;} -.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];} -.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];} - -.tiddler .defaultCommand {font-weight:bold;} - -.shadow .title {color:[[ColorPalette::TertiaryDark]];} - -.title {color:[[ColorPalette::SecondaryDark]];} -.subtitle {color:[[ColorPalette::TertiaryDark]];} - -.toolbar {color:[[ColorPalette::PrimaryMid]];} -.toolbar a {color:[[ColorPalette::TertiaryLight]];} -.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];} -.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];} - -.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];} -.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];} -.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];} -.tagging .button, .tagged .button {border:none;} - -.footer {color:[[ColorPalette::TertiaryLight]];} -.selected .footer {color:[[ColorPalette::TertiaryMid]];} - -.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];} -.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];} -.lowlight {background:[[ColorPalette::TertiaryLight]];} - -.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];} - -.imageLink, #displayArea .imageLink {background:transparent;} - -.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];} - -.viewer .listTitle {list-style-type:none; margin-left:-2em;} -.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];} -.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];} - -.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];} -.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];} -.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];} - -.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];} -.viewer code {color:[[ColorPalette::SecondaryDark]];} -.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];} - -.highlight, .marked {background:[[ColorPalette::SecondaryLight]];} - -.editor input {border:1px solid [[ColorPalette::PrimaryMid]];} -.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;} -.editorFooter {color:[[ColorPalette::TertiaryMid]];} -.readOnly {background:[[ColorPalette::TertiaryPale]];} - -#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];} -#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;} -#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; } -#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];} -#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;} -#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;} -#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];} -.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];} -.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];} -#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:alpha(opacity=60);} -/*}}}*/-
/*{{{*/ -* html .tiddler {height:1%;} - -body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;} - -h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;} -h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;} -h4,h5,h6 {margin-top:1em;} -h1 {font-size:1.35em;} -h2 {font-size:1.25em;} -h3 {font-size:1.1em;} -h4 {font-size:1em;} -h5 {font-size:.9em;} - -hr {height:1px;} - -a {text-decoration:none;} - -dt {font-weight:bold;} - -ol {list-style-type:decimal;} -ol ol {list-style-type:lower-alpha;} -ol ol ol {list-style-type:lower-roman;} -ol ol ol ol {list-style-type:decimal;} -ol ol ol ol ol {list-style-type:lower-alpha;} -ol ol ol ol ol ol {list-style-type:lower-roman;} -ol ol ol ol ol ol ol {list-style-type:decimal;} - -.txtOptionInput {width:11em;} - -#contentWrapper .chkOptionInput {border:0;} - -.externalLink {text-decoration:underline;} - -.indent {margin-left:3em;} -.outdent {margin-left:3em; text-indent:-3em;} -code.escaped {white-space:nowrap;} - -.tiddlyLinkExisting {font-weight:bold;} -.tiddlyLinkNonExisting {font-style:italic;} - -/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */ -a.tiddlyLinkNonExisting.shadow {font-weight:bold;} - -#mainMenu .tiddlyLinkExisting, - #mainMenu .tiddlyLinkNonExisting, - #sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;} -#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;} - -.header {position:relative;} -.header a:hover {background:transparent;} -.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;} -.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0; top:0;} - -.siteTitle {font-size:3em;} -.siteSubtitle {font-size:1.2em;} - -#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;} - -#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;} -#sidebarOptions {padding-top:0.3em;} -#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;} -#sidebarOptions input {margin:0.4em 0.5em;} -#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;} -#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;} -#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;} -#sidebarTabs .tabContents {width:15em; overflow:hidden;} - -.wizard {padding:0.1em 1em 0 2em;} -.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;} -.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;} -.wizardStep {padding:1em 1em 1em 1em;} -.wizard .button {margin:0.5em 0 0; font-size:1.2em;} -.wizardFooter {padding:0.8em 0.4em 0.8em 0;} -.wizardFooter .status {padding:0 0.4em; margin-left:1em;} -.wizard .button {padding:0.1em 0.2em;} - -#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;} -.messageToolbar {display:block; text-align:right; padding:0.2em;} -#messageArea a {text-decoration:underline;} - -.tiddlerPopupButton {padding:0.2em;} -.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;} - -.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;} -.popup .popupMessage {padding:0.4em;} -.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;} -.popup li.disabled {padding:0.4em;} -.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;} -.listBreak {font-size:1px; line-height:1px;} -.listBreak div {margin:2px 0;} - -.tabset {padding:1em 0 0 0.5em;} -.tab {margin:0 0 0 0.25em; padding:2px;} -.tabContents {padding:0.5em;} -.tabContents ul, .tabContents ol {margin:0; padding:0;} -.txtMainTab .tabContents li {list-style:none;} -.tabContents li.listLink { margin-left:.75em;} - -#contentWrapper {display:block;} -#splashScreen {display:none;} - -#displayArea {margin:1em 17em 0 14em;} - -.toolbar {text-align:right; font-size:.9em;} - -.tiddler {padding:1em 1em 0;} - -.missing .viewer,.missing .title {font-style:italic;} - -.title {font-size:1.6em; font-weight:bold;} - -.missing .subtitle {display:none;} -.subtitle {font-size:1.1em;} - -.tiddler .button {padding:0.2em 0.4em;} - -.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;} -.isTag .tagging {display:block;} -.tagged {margin:0.5em; float:right;} -.tagging, .tagged {font-size:0.9em; padding:0.25em;} -.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;} -.tagClear {clear:both;} - -.footer {font-size:.9em;} -.footer li {display:inline;} - -.annotation {padding:0.5em; margin:0.5em;} - -* html .viewer pre {width:99%; padding:0 0 1em 0;} -.viewer {line-height:1.4em; padding-top:0.5em;} -.viewer .button {margin:0 0.25em; padding:0 0.25em;} -.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;} -.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;} - -.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;} -.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;} -table.listView {font-size:0.85em; margin:0.8em 1.0em;} -table.listView th, table.listView td, table.listView tr {padding:0 3px 0 3px;} - -.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;} -.viewer code {font-size:1.2em; line-height:1.4em;} - -.editor {font-size:1.1em;} -.editor input, .editor textarea {display:block; width:100%; font:inherit;} -.editorFooter {padding:0.25em 0; font-size:.9em;} -.editorFooter .button {padding-top:0; padding-bottom:0;} - -.fieldsetFix {border:0; padding:0; margin:1px 0px;} - -.zoomer {font-size:1.1em; position:absolute; overflow:hidden;} -.zoomer div {padding:1em;} - -* html #backstage {width:99%;} -* html #backstageArea {width:99%;} -#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;} -#backstageToolbar {position:relative;} -#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;} -#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;} -#backstageButton a {padding:0.1em 0.4em; margin:0.1em;} -#backstage {position:relative; width:100%; z-index:50;} -#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;} -.backstagePanelFooter {padding-top:0.2em; float:right;} -.backstagePanelFooter a {padding:0.2em 0.4em;} -#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;} - -.whenBackstage {display:none;} -.backstageVisible .whenBackstage {display:block;} -/*}}}*/ --
/*** -StyleSheet for use when a translation requires any css style changes. -This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes. -***/ -/*{{{*/ -body {font-size:0.8em;} -#sidebarOptions {font-size:1.05em;} -#sidebarOptions a {font-style:normal;} -#sidebarOptions .sliderPanel {font-size:0.95em;} -.subtitle {font-size:0.8em;} -.viewer table.listView {font-size:0.95em;} -/*}}}*/-
/*{{{*/ -@media print { -#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;} -#displayArea {margin: 1em 1em 0em;} -noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */ -} -/*}}}*/-
<!--{{{--> -<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'> -<div class='headerShadow'> -<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> -<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span> -</div> -<div class='headerForeground'> -<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> -<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span> -</div> -</div> -<div id='mainMenu' refresh='content' tiddler='MainMenu'></div> -<div id='sidebar'> -<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div> -<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div> -</div> -<div id='displayArea'> -<div id='messageArea'></div> -<div id='tiddlerDisplay'></div> -</div> -<!--}}}-->-
<!--{{{--> -<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div> -<div class='title' macro='view title'></div> -<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div> -<div class='tagging' macro='tagging'></div> -<div class='tagged' macro='tags'></div> -<div class='viewer' macro='view text wikified'></div> -<div class='tagClear'></div> -<!--}}}-->-
<!--{{{--> -<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div> -<div class='title' macro='view title'></div> -<div class='editor' macro='edit title'></div> -<div macro='annotations'></div> -<div class='editor' macro='edit text'></div> -<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div> -<!--}}}-->-
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers: -* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar) -* [[MainMenu]]: The menu (usually on the left) -* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened -You'll also need to enter your username for signing your edits: <<option txtUserName>>-
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser - -Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]]) - -<<option txtUserName>> -<<option chkSaveBackups>> [[SaveBackups]] -<<option chkAutoSave>> [[AutoSave]] -<<option chkRegExpSearch>> [[RegExpSearch]] -<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]] -<<option chkAnimate>> [[EnableAnimations]] - ----- -Also see [[AdvancedOptions]]-
<<importTiddlers>>-
[[Main]]-
{{{ -EnsureVM: s'assurer que les services sont lancés pour un type de virtualisation - -USAGE - EnsureVM type - -Les types supportés sont virtualbox et kvm (par défaut) -}}}-
!Présentation -nutools est un ensemble d'utilitaires pour faciliter l'utililisation des Unixes, en particulier Linux, mais aussi MacOS X et Cygwin. -C'est aussi une librairie de scripts shell réutilisables ([[ulib]]) et une librairie de modules python réutilisables (pyulib) - -!Prérequis -Python >= 2.3 et GNU Awk sont requis pour que toutes les fonctionnalités soient supportées. -* Sous Linux, lors de l'installation du package, les meilleurs efforts sont fait pour que ces packages soient installés. -* Sous MacOSX, il faut installer manuellement Fink, DarwinPorts ou Homebrew - -! Outils -Chaque outil contient une aide intégrée. Il suffit de lancer l'outil avec l'argument {{{--help}}} pour avoir une aide détaillée. -* Déploiement d'un répertoire ou d'une archive -** [[uinst]]: Déploiement local -** [[mkusfx]]: Faire une archive auto-installable avec uinst -** [[ruinst]]: Déploiement distant avec uinst -** [[runs]]: Lancer un script avec le protocole RUNS -** [[rruns]]: Déploiement distant avec runs -* Librairie réutilisable de scripts shell -** [[uinc]]: Dépliage des inclusions dans un fichier -** [[ulibsync]]: Faire une copie locale pour un projet de ulib et/ou pyulib -* Autres outils -** [[udir]]: Gestion des paramètres d'un répertoire. Ces paramètres sont entre autres utilisés par uinst et uinc.-
[[GettingStarted]]-
{{{ -SKvm: lancer une machine virtuelle kvm - -USAGE - SKvm [options] vmName - SKvm {-l|-A|-g} - -OPTIONS - -n, --check - Ne rien faire excepté s'assurer que les modules kvm sont chargés - -u, --user - Lancer l'opération avec les droits de l'utilisateur courant. Par défaut, - ce script tente d'acquérir les droits de root. - -l, --list - Lister les machines virtuelles - -s, --start - Démarrer la machine virtuelle (par défaut) - Si le nom de la machine virtuelle n'est pas spécifiée, un menu est - affiché - -k, --stop - Arrêter la machine virtuelle - -H, --destroy - Arrêter sauvagement la machine virtuelle - -r, --restart - Redémarrer la machine virtuelle - -S, --managed-save - Enregistrer l'état de la machine virtuelle - -A, --stop-all - Arrêter toutes les machines virtuelles qui tournent actuellement - -g, --gui - Afficher le gestionnaire de machines virtuelle -}}}-
{{{ -SVirtualBox: lancer une machine virtuelle VirtualBox - -USAGE - SVirtualBox [options] vmName - -OPTIONS - -n Ne rien faire excepté s'assurer que les modules VirtualBox sont chargés - -l Lister les machines virtuelles - -s Démarrer la machine virtuelle (par défaut) - Si le nom de la machine virtuelle n'est pas spécifiée, un menu est - affiché - -b Démarrer la VM sans interface graphique. Cette option n'est valide - qu'avec -s - -k Arrêter la machine virtuelle (par ACPI) - -p Mettre en veille la machine virtuelle (par ACPI) - -H Arrêter sauvagement la machine virtuelle - -R Redémarrer sauvagement la machine virtuelle - -S Enregistrer l'état de la machine virtuelle - -g Afficher le gestionnaire de machines virtuelle -}}}-
Outils divers pour linux/macosx, et librairies pour bash-
nutools-
{{{ -_root: devenir l'utilisateur root, avec 'sudo' si possible, ou 'su' si -'sudo' n'est pas installé -}}}-
{{{ -apacheconfig: Gérer la configuration d'un serveur web apache - -USAGE - apacheconfig -c - apacheconfig -t -- args... - -OPTIONS - -c, --create - Créer un nouveau répertoire de configuration pour un hôte - -d, --destdir DESTDIR[=apacheconfig] - Nom du répertoire local de configuration. - - -t, --template [OPT] - Gérer les fichiers du répertoire local avec templatectl. La valeur de - cette option est utilisée comme argument court pour l'invocation de - templatectl, e.g - apacheconfig -tm args - est équivalent à - templatectl -m args - Les arguments qui restent sont passés tels quels à templatectl - Les options courantes de templatectl -l, -v, -m, -L sont disponibles - directement - --help-template - Afficher l'aide concernent la gestion des templates. - Equivalent à -t -- --help - -h, --host HOST - Spécifier l'hôte. Equivalent à -v host=HOST - --sysname SYSNAME - --sysdist SYSDIST - -s, --sysver SYSVER - Spécifier la distribution pour laquelle synchroniser le template. Par - défaut, choisir les valeurs correspondantes au système courant. - Les options -7 et -8 sont des aliases respectivement pour -s wheezy et - -s jessie, parce que les fichiers par défaut ont changé à partir de - debian jessie. - - -u, --update, --deploy - Mettre à jour la configuration système à partir du répertoire local. - Lors du déploiement de la configuration, les valeurs des variables - dynamiques sont remplacées dans les fichiers destination. - Les arguments qui restent sont passés tels quels à apache_autoconf - -r, --certsdir CERTSDIR - Spécifier le cas échéant le répertoire contenant les certificats à - déployer. Cet argument est requis si le répertoire certsconf/ existe. - - --localhosts - Créer dans le fichier /etc/hosts tous les noms d'hôte ayant un suffixe - .local mentionnés dans les fichiers de site. Cette option est utile pour - le développement et les tests. - -C, --one-conf CONF - Ne déployer que le fichier de configuration spécifié. Cette option est - utilisée avec --deploy et est utile pour le développement et les tests. - -M, --one-module MODULE - Ne déployer que le fichier de module spécifié. Cette option est utilisée - avec --deploy et est utile pour le développement et les tests. - -S, --one-site SITE - Ne déployer que le fichier de site spécifié. Cette option est utilisée - avec --deploy ou --localhosts et est utile pour le développement et les - tests. -}}}-
{{{ -authftp: Se connecter sur un site FTP authentifié -Ce script nécessite ncftp. Il est conçu pour faciliter l'accès à des sites FTP -s'il est requis d'y accéder par un proxy FTP pour les connexion authentifiées. - -USAGE - authftp [options] host login password [path] - -OPTIONS - -p, --proxy - -n, --noproxy - Forcer l'utilisation, resp. ne pas utiliser, le proxy FTP (i.e. faire la - connexion directement) - -l, --lftp - Se connecter avec lftp au lieu de ncftp. Le fonctionnement n'est pas - garanti si l'on utilise un proxy FTP. - -o OPTION - Ajouter une option à la commande lancée. Si l'option prend un argument, - il faut doubler l'option -o, e.g. - authftp -l -o -e -o 'mirror remote local' host login pass - Dans cet exemple, l'option -e de lftp est utilisée pour faire un miroir - local du répertoire remote. - --tls - Indiquer que la connexion se fera en TLS. Implique --lftp puisque ncftp - ne le supporte pas. - -note: A cause d'une limitation de lftp, ce n'est pas possible de se connecter -automatiquement avec lftp si le mot de passe contient une virgule. A cause de la -façon dont le proxy ftp est configuré, il n'est pas possible de se connecter -avec un mot de passe qui contient le caractère @ -}}}-
{{{ -caturl: Afficher une url - -USAGE - caturl <file.url|file.desktop|URL> - -OPTIONS - -c, --check - Vérifier que le fichier est valide - -g, --get - Attaquer l'url spécifiée avec curl -}}}-
{{{ -compileAndGo: see http://Yost.com/computers/compileAndGo -}}}-
{{{ -cssh: Faire une connexion ssh en lançant automatiquement un screen sur l'hôte distant - -USAGE - cssh [user@]host [options] - -En principe, hormis l'argument user@host, il ne faudrait spécifier que des -options. Dans le cas où d'autres arguments seraient spécifiés, les meilleurs -efforts sont faits pour lancer ces commandes avant screen. -}}}-
{{{ -doinplace: filtrer en place un fichier à travers une suite de commandes - -USAGE - doinplace FILE COMMAND [ARGS...] - -Si on utilise une commande avec des options, penser à utliser '--' pour séparer -les options de ce script des options de la commande - -En plus des commandes systèmes, il est possible d'utiliser toute fonction de -nutools qui effectue des traitement sur un flux comme stripnl, filter_empty, -merge_contlines, filter_comment, filter_conf, etc. Les fonctions nl2lf, nl2crlf, -nl2cr, latin1compat et noaccents sont aussi disponibles par convenance. - -OPTIONS - -p, --evalp - Evaluer la commande avec evalp(), ce qui permet de chainer plusieurs - commandes en les séparant par //. Cette option est automatiquement - activée si ce script est lancé avec le nom doinplacex - -g, --ignore-error, --replace-always - Normalement, le fichier n'est pas remplacé si la commande retourne une - erreur. Avec cette option, le fichier est remplacé quel que soit le code - de retour de la commande. A utiliser par exemple avec des commandes - comme grep qui peuvent retourner FAUX s'ils ne trouvent pas le motif. - Cette option est automatiquement activée si ce script est lancé avec le - nom doinplacef -}}}-
{{{ -dumpclients: afficher les connexions TCP entrantes sur un port - -USAGE - dumpclients [options] port - -OPTIONS - -4, --only-tcp - -6, --only-tcp6 - Se limiter au protocole spécifié. Par défaut, afficher toutes les - connexions, qu'elles soient en IPv4 ou en IPv6 - -a, --all - Afficher tous les sockets, y compris les ports d'écoute. Par défaut, - seules les sockets ouvertes sont affichées. - -n, --numeric - Afficher uniquement les adresses IP au lieu du nom d'hôte. - -z, --allow-no-port - Ne pas exiger que le port soit spécifié - --show none,ip,port,state - Spécifier d'afficher comme informations supplémentaire: rien, l'adresse - ip, le port et/ou l'état. Par défaut, afficher le port et l'état. -}}}-
{{{ -Usage: /usr/bin/emacs [OPTION-OR-FILENAME]... - -Run Emacs, the extensible, customizable, self-documenting real-time -display editor. The recommended way to start Emacs for normal editing -is with no options at all. - -Run M-x info RET m emacs RET m emacs invocation RET inside Emacs to -read the main documentation for these command-line arguments. - -Initialization options: - ---batch do not do interactive display; implies -q ---daemon start a server in the background ---debug-init enable Emacs Lisp debugger for init file ---display, -d DISPLAY use X server DISPLAY ---no-desktop do not load a saved desktop ---no-init-file, -q load neither ~/.emacs nor default.el ---no-shared-memory, -nl do not use shared memory ---no-site-file do not load site-start.el ---no-splash do not display a splash screen on startup ---no-window-system, -nw do not communicate with X, ignoring $DISPLAY ---quick, -Q equivalent to -q --no-site-file --no-splash ---script FILE run FILE as an Emacs Lisp script ---terminal, -t DEVICE use DEVICE for terminal I/O ---user, -u USER load ~USER/.emacs instead of your own - -Action options: - -FILE visit FILE using find-file -+LINE go to line LINE in next FILE -+LINE:COLUMN go to line LINE, column COLUMN, in next FILE ---directory, -L DIR add DIR to variable load-path ---eval EXPR evaluate Emacs Lisp expression EXPR ---execute EXPR evaluate Emacs Lisp expression EXPR ---file FILE visit FILE using find-file ---find-file FILE visit FILE using find-file ---funcall, -f FUNC call Emacs Lisp function FUNC with no arguments ---insert FILE insert contents of FILE into current buffer ---kill exit without asking for confirmation ---load, -l FILE load Emacs Lisp FILE using the load function ---visit FILE visit FILE using find-file - -Display options: - ---background-color, -bg COLOR window background color ---basic-display, -D disable many display features; - used for debugging Emacs ---border-color, -bd COLOR main border color ---border-width, -bw WIDTH width of main border ---color, --color=MODE override color mode for character terminals; - MODE defaults to `auto', and can also - be `never', `auto', `always', - or a mode name like `ansi8' ---cursor-color, -cr COLOR color of the Emacs cursor indicating point ---font, -fn FONT default font; must be fixed-width ---foreground-color, -fg COLOR window foreground color ---fullheight, -fh make the first frame high as the screen ---fullscreen, -fs make first frame fullscreen ---fullwidth, -fw make the first frame wide as the screen ---maximized, -mm make the first frame maximized ---geometry, -g GEOMETRY window geometry ---no-bitmap-icon, -nbi do not use picture of gnu for Emacs icon ---iconic start Emacs in iconified state ---internal-border, -ib WIDTH width between text and main border ---line-spacing, -lsp PIXELS additional space to put between lines ---mouse-color, -ms COLOR mouse cursor color in Emacs window ---name NAME title for initial Emacs frame ---no-blinking-cursor, -nbc disable blinking cursor ---reverse-video, -r, -rv switch foreground and background ---title, -T TITLE title for initial Emacs frame ---vertical-scroll-bars, -vb enable vertical scroll bars ---xrm XRESOURCES set additional X resources ---parent-id XID set parent window ---help display this help and exit ---version output version information and exit - -You can generally also specify long option names with a single -; for -example, -batch as well as --batch. You can use any unambiguous -abbreviation for a --option. - -Various environment variables and window system resources also affect -Emacs' operation. See the main documentation. - -Report bugs to bug-gnu-emacs@gnu.org. First, please see the Bugs -section of the Emacs manual or the file BUGS. -}}}-
{{{ -fconv: convertir un fichier ou les fichiers d'un répertoire - -USAGE - fconv -f FILE [cmds...] - fconv FILE [cmds...] - -Une ou plusieurs commandes peuvent être spécifiées, séparées par // -La commande par défaut est 'lf' -Si des commandes utilisant des options sont utilisées, penser à séparer les -options de fconv avec -- - -OPTIONS - -N, --detect-always - Pour la commande conv, ne pas optimiser le calcul de l'encoding. Cette - option n'est valide que si src_enc n'est pas spécifié. On assume que - tous les fichiers n'ont pas le même encoding: l'encoding src_enc est - donc recalculé à chaque fois. - -r, --reverse - Pour la commande conv, inverser src_enc et dest_enc, qui doivent être - tous les deux spécifiés. - -f, --file FILE - Spécifier le fichier ou le répertoire concerné par la conversion. Les - aliases -d et --dir sont aussi reconnus. - Si cette option n'est pas spécifiée, le premier argument est considéré - comme le nom du fichier ou du répertoire à convertir. Par défaut, - convertir l'entrée standard. - Si un répertoire est spécifié, tous les fichiers de ce répertoire et de - ses sous-répertoires sont recherchés de façon récursive, sans limite de - profondeur. Ensuite, chacun de ces fichiers est converti. - --show-cmd - Afficher la commande qui serait exécutée - -COMMANDES - c, conv dest_enc [src_enc] - Convertir le fichier dans un autre encoding. - dest_enc est l'encoding destination. Il doit être spécifié. - src_enc est l'encoding source. S'il n'est pas spécifié ou vaut 'detect', - il est autodétecté. - U, utf8 [src_enc] - Equivalent à conv utf8 src_enc - L, latin1 [src_enc] - Equivalent à conv latin1 src_enc - lf - crlf - cr - Convertir respectivement les caractères de fin de ligne en LF, CR/LF ou CR - lc, latin1compat - Transformer certains caratères UTF-8 en équivalents qui existent en Latin1 - na, noaccents - Transformer les caractères accentués en caractères non accentués - sort [-u] - Trier le fichier avec la commande sort. Attention! Il ne faut utiliser - que les options de sort qui agissent sur un flux e.g. -u pour trier les - lignes de façon unique. -}}}-
{{{ -fnconv: renommer un fichier ou les fichiers d'un répertoire - -USAGE - fnconv -f FILE [cmds...] - fnconv FILE [cmds...] - -Une ou plusieurs commandes peuvent être spécifiées, séparées // -La commande par défaut est 'fixcase' - -OPTIONS - -N, --detect-always - Pour la commande conv, ne pas optimiser le calcul de l'encoding. Cette - option n'est valide que si src_enc n'est pas spécifié. On assume que - tous les fichiers n'ont pas le même encoding: l'encoding src_enc est - donc recalculé à chaque fois. - -r, --reverse - Pour la commande conv, inverser src_enc et dest_enc, qui doivent être - tous les deux spécifiés. - -f, --file FILE - Spécifier le fichier ou le répertoire concerné par le renommage. Les - aliases -d et --dir sont aussi reconnus. - Si cette option n'est pas spécifiée, le premier argument est considéré - comme le nom du fichier ou du répertoire à renommer. - Si un répertoire est spécifié, le traitement est appliqué à tous les - fichiers et répertoires de façon récursive, sans limite de profondeur. - --show-cmd - Afficher la commande qui serait exécutée - -COMMANDES - C, conv dest_enc [src_enc] - Convertir le nom du fichier dans un autre encoding. - dest_enc est l'encoding destination. Il doit être spécifié. - src_enc est l'encoding source. S'il n'est pas spécifié ou vaut 'detect', - il est autodétecté. - U, utf8 [src_enc] - Equivalent à conv utf8 src_enc - L, latin1 [src_enc] - Equivalent à conv latin1 src_enc - lc, latin1compat - Transformer certains caratères UTF-8 en équivalents qui existent en Latin1 - na, noaccents - Transformer les caractères accentués en caractères non accentués - l, lowercase - Transfomer le nom en minuscule - u, uppercase - Transformer le nom en majuscule - f, fixcase - Transformer le nom en minuscule s'il est entièrement en majuscule -}}}-
{{{ -geturl: Télécharger un fichier avec wget ou curl - -USAGE - geturl <file.url|file.desktop|URL> [wget options] -}}}-
{{{ -mkRewriteRules: Créer un fichier de redirections pour Apache à partir d'un certain -nombre de règles - -USAGE - mkRewriteRules -f rewrite.rules [-o RewriteRules.conf] [-w RewriteRules.html] host - -OPTIONS - -p Générer les directives <Proxy...> et tenir compte de proxy_acls - Par défaut, le champ proxy_acls est ignoré - -FORMAT des règles de mapping -============================ - -Les commentaires commencent par le signe "#" -Les règles sont de la forme: - src:dest:host:suffix:OPTS:prot:proxy_acls - ^prefix - =literal - -prot vaut par défaut http. Il peut valoir aussi https - -Si dest ou suffix se terminent par $, on est en mode NO_SLASH -En mode NO_SLASH, si src se termine par $, on est en mode NO_TRAIL - -* Si dest est de la forme Application.woa -En mode NO_SLASH, on génère - RewriteRule ^/src(.*) [prot://host]/cgi-bin/WebObjects/dest[/suffix]$1 [L,OPTS] -En mode NO_SLASH+NO_TRAIL, on génère - RewriteRule ^/src [prot://host]/cgi-bin/WebObjects/dest[/suffix] [L,OPTS] -En mode normal, on génère - RewriteRule ^/src$ /src/ - RewriteRule ^/src/(.*) [prot://host]/cgi-bin/WebObjects/dest[/suffix]/$1 [L,OPTS] - -* Si dest n'est pas de la forme Application.woa -En mode NO_SLASH, on génère - RewriteRule ^/src(.*) [prot://host]/dest[/suffix]$1 [L,OPTS] -En mode NO_SLASH+NO_TRAIL, on génère - RewriteRule ^/src [prot://host]/dest[/suffix] [L,OPTS] -En mode normal, on génère - RewriteRule ^/src$ /src/ - RewriteRule ^/src/(.*) /dest[/suffix]/$1 [L,OPTS] - -Si une règle est précédée d'une ou plusieurs lignes de la forme "^prefix", -ces lignes sont copiées avant chacune des commandes RewriteRule générées -pour une règle. Ceci permet d'ajouter des conditions avec RewriteCond pour -une règle. e.g. - ^RewriteCond %{REMOTE_ADDR} 10\..* - src:dest.woa -qui génère: - RewriteCond %{REMOTE_ADDR} 10\..* - RewriteRule ^/src$ /src/ - RewriteCond %{REMOTE_ADDR} 10\..* - RewriteRule ^/src/(.*) /cgi-bin/WebObjects/dest.woa/$1 [L] - -Une ligne de la forme "=literal" est recopiée sans modifications (sans le "=") -dans le fichier de sortie. - -proxy_acls est utilisé si l'option -p est spécifiée et OPTS contient P (comme -proxy), ou si le mode de réécriture requière l'utilisation d'un proxy. - -* Avec la valeur "None", aucune directive <Proxy> n'est générée -* Si aucune valeur n'est spécifiée, la directive suivante est générée: - <Proxy $URL> - AddDefaultCharset off - Order Deny,Allow - Allow from all - </Proxy> -* Si une valeur est spécifiée, la directive suivante est générée: - <Proxy $URL> - AddDefaultCharset off - Order Allow,Deny - Allow from $proxy_acls - </Proxy> - -Dans les exemples donnés ci-dessus, $URL est l'url générée par la réécriture, -et $proxy_acls la valeur du champ proxy_acls spécifiée ci-dessus. -}}}-
{{{ -mkiso: créer une image iso d'un répertoire - -USAGE - mkiso [options] srcdir [dest.iso] - -OPTIONS - -M, --hfs - créer une image hybride ISO/HFS - -V, --volume - Nom du volume. Par défaut, prendre le nom de base du répertoire - d'origine. La taille est de 32 caractères max. - -A, --application - Description de l'application qui est sur l'image créée. Par défaut, - prendre le nom de base du répertoire d'origine. La taille est de 128 - caractères max. -}}}-
{{{ -mkurl: Enregistrer une url dans un fichier raccourci - -USAGE - mkurl <url> [output] - -OPTIONS -Par défaut, l'url est enregistrée dans un fichier homepage.url -Mais il est possible de spécifier un fichier avec l'extension .url pour un -raccourci utilisable aussi sous Windows, ou avec l'extension .desktop pour -compatibilité avec le standard XDG -}}}-
{{{ -mkusfx: Créer une archive auto-extractible qui installe son contenu avec uinst - -USAGE - mkusfx [options] [--bare] src cmd... - mkusfx [options] [--uinst] src - -OPTIONS - --bare - Installer le contenu de l'archive en lançant la commande 'cmd...' avec - le répertoire courant étant le contenu de l'archive. Typiquement, ce - sera une commande de forme './script', où script est un fichier situé à - la racine de l'archive - Dans ce mode d'installation, l'option --self-contained est ignorée. - --uinst - Installer le contenu de l'archive avec uinst (par défaut) - -o dest - Spécifier le fichier de sortie. Par défaut, il s'agit de - ${src}-installer.run - --tmp-archive - Spécifier qu'il s'agit d'une archive temporaire. Cette archive - s'auto-détruit après utilisation. - --self-contained - Spécifier que l'archive doit pouvoir s'installer même sur un système sur - lequel nutools n'est pas installé. Cette archive contiendra une copie - locale de ulib et uinst.sh -}}}-
{{{ -mocifs: Monter un partage Windows/Samba/CIFS - -USAGE - mocifs [user@]host[/path] [mountpoint] - -Par défaut, le répertoire distant est montée sur un répertoire avec le même nom -de base que l'hôte. Si le répertoire distant est déjà monté, il est démonté. -Les options -M et -U permettent de modifier le comportement par défaut. - -OPTIONS - -M - Forcer le montage - -U - Forcer le démontage - -o OPTIONS - Ajouter les options spécifiées à la commande de montage mount.cifs - -u USERNAME - -p PASSWORD - -c USERNAME:PASSWORD - Spécifier les credentials à utiliser pour la connexion -}}}-
{{{ -modav: Monter un répertoire sur un hôte distant avec davfs - -USAGE - modav http[s]://host[/path] [mountpoint] - -Par défaut, le répertoire distant est montée sur un répertoire avec le même nom -de base que l'hôte. Si le répertoire distant est déjà monté, il est démonté. -Les options -M et -U permettent de modifier le comportement par défaut. - -OPTIONS - -M - Forcer le montage - -U - Forcer le démontage - -o OPTIONS - Ajouter les options spécifiées à la commande de montage - -u USERNAME - -p PASSWORD - -c USERNAME:PASSWORD - Si les credentials à utiliser ne sont pas configuré dans le fichier - /etc/davfs2/secrets, cette option permet de les spécifier. Si cette - option est utilisée, il est possible de rajouter - ask_auth 0 - dans le fichier /etc/davfs2/davfs2.conf pour éviter le conflit qui se - produit quand des informations sont demandées interactivement. C'est le - cas par exemple si une connexion en https est faite et que la chaine de - certification n'est pas configurée. Pour mémoire, cela se fait avec - servercert myCAs.pem - dans le fichier /etc/davfs2/davfs2.conf - Bien entendu, il est préférable de configurer les credentials dans le - fichier /etc/davfs2/secrets avec la syntaxe - url username password - ou - mountpoint username password -}}}-
{{{ -moiso: Monter une image ISO - -USAGE - moiso image.iso [mountpoint] - -Par défaut, l'image iso est montée sur un répertoire avec le même nom de base. -Si l'image est déjà montée, elle est démontée. Les options -m et -u permettent -de modifier le comportement par défaut. - -OPTIONS - -m - Forcer le montage - -u - Forcer le démontage -}}}-
{{{ -mossh: Monter un répertoire sur un hôte distant avec sshfs - -USAGE - mossh [user@]host[:/path] [mountpoint] - -Par défaut, le répertoire distant est montée sur un répertoire avec le même nom -de base que l'hôte. Si le répertoire distant est déjà monté, il est démonté. -Les options -M et -U permettent de modifier le comportement par défaut. - -OPTIONS - -M - Forcer le montage - -U - Forcer le démontage - -o OPTIONS - Ajouter les options spécifiées à la commande de montage - -s - Equivalent à -o allow_other ou -o allow_root selon que l'on est root ou - non - -u USER - Spécifier le user pour la connexion distante, s'il n'est pas possible de - le spécifier dans l'url. En cas de conflit, la valeur dans l'url est - prioritaire par rapport à cette option. -}}}-
{{{ -mysqlcsv: Faire une requête MySQL et formater la sortie pour traitement avec awkcsv - -USAGE - mysqlcsv [query [db]] [-- mysql options] - -query est la requête sql à exécuter. Si query n'est pas spécifiée, la(les) - requête(s) sql sont prises sur l'entrée standard, ou depuis un fichier - si l'option -f est spécifiée. -db est le nom de la base de données. Cette argument n'est lu que si le nom - de la base de donnée n'est ni spécifié dans le fichier de configuration, - ni spécifié avec l'option -D - -OPTIONS - -h, --host HOST - -P, --port PORT - -u, --user USER - -pPASSWORD - -D, --database DATABASE - Informations de connexion à la base de données - -C, --config CONFIG - Prendre les informations de connexion depuis le fichier spécifié. - Le fichier doit être de la forme - host=HOST - #post=3306 - user=USER - password=PASS - #database=DB - #query=QUERY - Les variables port, database et query sont facultatives. - Les valeurs définies dans ce fichier sont prioritaires par rapport à - celles qui auraient été spécifiées sur la ligne de commande. - Utiliser password=--NOT-SET-- s'il faut se connecter sans mot de passe - Cette option peut être utilisée plusieurs fois, auquel cas les fichiers - sont chargés dans l'ordre. - --profile PROFILE - La variable $PROFILE est définie avec la valeur spécifiée avant de - sourcer les fichiers de configuration. Cela permet d'avoir des fichiers - de configuration qui calculent dynamiquement les paramètres en fonction - de la valeur du profil. - -N, --no-headers - Ne pas afficher les en-têtes - -c, --force - Continuer le traitement même en cas d'erreur - -r, --raw - Ne pas autoriser mysql à mettre en échappement certaines valeurs - retournées par le serveur. Par défaut, les transformations suivantes - sont effectuées: - newline --> \n - tab --> \t - nul --> \0 - \ --> \\ - -n, --nulls - Transformer dans le flux en sortie les valeurs NULL en chaines vides - -f, --input INPUT - Lire la requête depuis le fichier input au lieu de le lire depuis la - ligne de commande ou l'entrée standard. Ne pas spécifier cette option - ou utiliser '-' pour lire depuis l'entrée standard. - Cette option est ignorée si la requête est spécifiée parmi les - arguments. -}}}-
{{{ -mysqlloadcsv: Charger une table MySQL avec un fichier csv - -USAGE - mysqlloadcsv [db.]table [fields...] [-- mysql options] - -db est le nom de la base de données -table est le nom de la table à charger -fields est la liste des colonnes. Si cette valeur est spécifiée, il faudra - peut-être utiliser l'option -s pour ignorer le cas échéant la ligne des - en-têtes dans le fichier en entrée. Sinon, les colonnes à utiliser sont - calculées à partir du fichier en entrée. - -Dans les données en entrées, qui doivent être en UTF8, les conversions suivantes -sont effectuées par MySQL: - - \0 --> <caractère NUL> - \b --> <backspace> - \n --> <newline> - \r --> <carriage return> - \t --> <tab> - \Z --> Ctrl+Z - \N --> NULL - -OPTIONS - -h, --host host - -P, --port port - -u, --user user - -ppassword - Informations de connexion à la base de données - -C, --config CONFIG - Prendre les informations de connexion depuis le fichier spécifié. - Le fichier doit être de la forme - host=HOST.TLD - #post=3306 - user=USER - password=PASS - #dbtable=DB.TABLE - #fields=(FIELDS...) - # Il est possible aussi de spécifier DB et TABLE séparément: - #database=DB - #table=TABLE - Les variables port, dbtable et fields sont facultatives. - Les valeurs définies dans ce fichier sont prioritaires par rapport à - celles qui auraient été spécifiées sur la ligne de commande. - Utiliser password=--NOT-SET-- s'il faut se connecter sans mot de passe - Cette option peut être utilisée plusieurs fois, auquel cas les fichiers - sont chargés dans l'ordre. - --profile PROFILE - La variable $PROFILE est définie avec la valeur spécifiée avant de - sourcer les fichiers de configuration. Cela permet d'avoir des fichiers - de configuration qui calculent dynamiquement les paramètres en fonction - de la valeur du profil. - -f, --input INPUT - Fichier en entrée. Ne pas spécifier cette option ou utiliser '-' pour - lire depuis l'entrée standard. - -d, --auto-dbtable DB - Spécifier la base de données avec laquelle se connecter. De plus, si le - nom de la table n'est pas spécifié, prendre par défaut le nom de base du - fichier spécifié avec l'option -f - -s, --skip-lines NBLINES - Nombre de lignes à sauter dans le fichier en entrée - -n, --fake - Ne pas effectuer l'opération. Afficher simplement la commande SQL. - --run - Forcer le lancement de l'opération. Utiliser cette option avec -A pour - créer la table avec les paramètres analysés. - -T, --truncate - Vider la table avant d'effectuer le chargement - -L, --load-data - Charger les données avec la commande 'load data local'. C'est l'option - par défaut. Le fichier est transmis tel quel à MySQL. - -I, --insert-data - Charger les données en générant des commandes 'insert into'. L'effet est - en principe le même avec l'option -L (sauf que certains formats de date - exotiques seront correctement importés). Cette option peut aussi être - utilisée avec l'option -n pour générer une liste de commande à corriger - et/ou adapter. - -U, -k, --update-data KEY - Au lieu de charger de nouvelles données, essayer de mettre à jour la - table. KEY est le nom de la colonne qui est utilisée comme clé. Toutes - les autres colonnes sont les nouvelles données à mettre à jour. Si - aucune ligne ne correspond à une clé donnée, la mise à jour pour cette - ligne est ignorée. - Note: utiliser les options -T et -U ensemble n'a pas de sens, mais -T - est quand même honoré. - -Z, --null-value VALUE - Avec les options -I et -U, considérer que NULL est représenté par la - chaine spécifiée. Par défaut, utiliser \N - -z, --null-is-empty - Avec les options -I et -U, considérer que NULL est représenté par la - chaine vide. Cette option est équivalente à -Z '' - -t, --types [DEFAULT_TYPE,]FIELD:TYPE,... - Spécifier pour chaque champ mentionné le type de donnée à forcer. Le - type 'auto' signifie que le type est autodétecté. C'est la valeur par - défaut. Les autres types valides sont 'str', 'int' et 'date' - Cette option est ignorée avec l'option -L - -A, --analyse - Analyser les données et afficher une requête pour créer une table qui - pourrait contenir ces données. - Cette option implique --fake et affiche simplement la commande SQL. - Pour lancer la commande SQL générée, il faut ajouter l'option --run - APRES cette option -}}}-
{{{ -noerr: lancer une commande en supprimant la sortie d'erreur -}}}-
{{{ -noerror: lancer une commande en masquant son code de retour. le code de retour est toujours 0 -}}}-
{{{ -noout: lancer une commande en supprimant la sortie standard -}}}-
{{{ -nutools: configurer ou afficher des informations sur nutools - -USAGE - nutools [VERSION] - -OPTIONS - -C, --configure - Faire la configuration pour l'utilisateur courant en appelant uenv -u - Avec cette option, l'option -l (ou --local-profiles) est aussi reconnue - et est passée directement à uenv - -v, --version - Afficher la version de nutools installée. C'est l'option par défaut - -c, --check - Calculer si la version installée correspond à la version spécifiée - -o, --oper OPERATOR - Spécifier l'opérateur à utiliser avec l'option --check (par défaut, - utiliser l'opérateur ge, qui permet de vérifier si la version minimum - spécifiée est installée) - --eq - --ne - --lt - --le - --gt - --ge - --same - --diff - Ces options sont des raccourcis. L'option '--OP' est équivalente à - '--check --op OP' -}}}-
{{{ -openurl: Ouvrir une URL dans un navigateur - -USAGE - openurl <file.url|file.desktop|URL> -}}}-
{{{ -pdev: basculer sur une branche de développement - -USAGE - pdev [FEATURE [SOURCE]] - pdev -m|-l|-d [FEATURE] - -- Vérifier l'existence de la branche develop. La créer si nécessaire en la - basant sur [origin/]master. -- Vérifier s'il n'y a pas de modifications locales. Sinon, proposer de faire un - commit ou un stash. -- Si FEATURE est spécifié, et si on n'est pas déjà sur cette branche, basculer - vers cette nouvelle branche. S'il s'agit d'une nouvelle branche, la baser sur - la branche SOURCE, qui vaut par défaut develop -- Si FEATURE n'est pas spécifié, basculer sur develop s'il s'agit de la seule - solution, sinon afficher un menu pour choisir la branche de destination. - -OPTIONS - -C, --projdir PROJDIR - Spécifier le répertoire de base du projet qui est dans git. Par défaut, - on travaille dans le répertoire courant et on laisse git trouver le - répertoire de base du projet. Avec cette option, le répertoire courant - est modifié avant de lancer les commandes git. - -O, --origin ORIGIN - Spécifier le nom de l'origine. Par défaut, utiliser 'origin' - -o, --offline - En cas de création d'une branche, ne pas pousser vers l'origine; ne pas - tenter le cas échéant de traquer la branche dans l'origine; ne pas - supprimer une branche dans l'origine. Cette option est automatiquement - activée si la variable UTOOLS_VCS_OFFLINE est définie. - --online - Annuler l'effet de la variable UTOOLS_VCS_OFFLINE: forcer le mode online - --sync - Faire un certain nombre d'opération pour 'corriger' le dépôt local: pour - chacune des branches distantes, vérifier qu'il existe une branche locale - qui la traque, et pour chaque feature branche locale, vérifier qu'il - existe une branche distante associée. Cette option nécessite --online - - -s, --squash COMMIT_MSG - Si la branche actuelle est une feature branch, la merger comme un seul - commit avec le message COMMIT_MSG dans develop puis la supprimer. Puis - basculer sur la branche develop. - Cette option ne devrait pas être utilisée avec -k, puisque bien que les - modifications soient mergées, la branche elle-même n'est pas considérée - comme mergée. Les résultats sont donc indéfinis si la branche est mergée - à plusieurs reprises. - -b, --rebase - Si la branche actuelle est une feature branch, lancer 'git rebase -i' - sur la feature branch. Cela permet de réordonner les commits pour - nettoyer l'historique avant de fusionner la branche avec -m - Cette option devrait le cas échéant être utilisée immédiatement avant -m - ou alors il faut forcer le push et communiquer avec l'équipe sur le fait - que la branche de feature a été rebasée. - -m, --merge - Si la branche actuelle est une feature branch, la merger dans develop - puis la supprimer. Puis basculer sur la branche develop. - --merge-log - Ajouter un résumé des modifications sur la feature branch en ajoutant le - log en une ligne de chaque commit dans le message du merge. Cette option - n'est en principe pas nécessaire puisque 'prel -um' intègre la liste des - commits dans CHANGES.txt - -k, --keep - Avec l'option -m, ne pas supprimer une feature branch après l'avoir - fusionnée dans develop. Cela permet d'intégrer les modifications petit à - petit. - --delete - Supprimer une feature branch, à condition qu'elle aie déjà été - entièrement fusionnée dans la branch develop - --force-delete - Supprimer une feature branch, même si elle n'a pas encore été fusionnée - dans la branche develop - - -l, --log - -d, --diff - Afficher les modifications entre deux branches. L'option --log affiche - les modifications dans l'ordre alors que --diff affiche les différences - sous forme de diff. Les deux options peuvent être combinées et ont - l'effet de 'git log -p' - La branche comparée, s'il elle n'est pas spécifiée, est par défaut la - branche courante. S'il s'agit d'une feature branch, elle est comparée à - develop. S'il s'agit de la branche develop, elle est comparée à master. -}}}-
{{{ -prel: basculer sur une branche de release - -USAGE - prel -u [SOURCE] - prel -c [RELEASE [SOURCE]] - prel -m|-l|-d [RELEASE] - -- Vérifier s'il n'y a pas de modifications locales. Sinon, proposer de faire un - commit ou un stash. -- Avec l'option -c, s'il existe une branche de release, proposer de basculer - vers elle ou sur la branche master. Sinon, basculer sur la branche master. -- Avec l'option -u, proposer ou fixer une branche de release à créer. Si elle - existe déjà, basculer vers elle. Sinon, la créer en la basant sur SOURCE, qui - vaut par défaut develop - -OPTIONS - -C, --projdir PROJDIR - Spécifier le répertoire de base du projet qui est dans git. Par défaut, - on travaille dans le répertoire courant et on laisse git trouver le - répertoire de base du projet. Avec cette option, le répertoire courant - est modifié avant de lancer les commandes git. - -O, --origin ORIGIN - Spécifier le nom de l'origine. Par défaut, utiliser 'origin' - -o, --offline - En cas de création d'une branche, ne pas pousser vers l'origine; ne pas - tenter le cas échéant de traquer la branche dans l'origine; ne pas - supprimer une branche dans l'origine. Cette option est automatiquement - activée si la variable UTOOLS_VCS_OFFLINE est définie. - --online - Annuler l'effet de la variable UTOOLS_VCS_OFFLINE: forcer le mode online - - -c, --checkout - Basculer vers une branche de release existante. C'est l'option par - défaut. Si aucune branche de release n'existe, basculer vers master - -u, --update - Préparer une nouvelle release. Utiliser une des options -x, -z ou -p - pour spécifier le type de release à préparer. Si la branche qui serait - créée pour le type de release existe déjà, basculer vers cette branche. - S'il faut la créer, la baser sur la branche SOURCE, qui vaut par défaut - develop - --menu - -x, --major - -z, --minor - -p, --patchlevel - Utilisé avec l'option -u, soit afficher un menu pour choisir la version - de la nouvelle release (par défaut), soit préparer respectivement une - release majeure, mineure, ou pour correction de bug. - -v-OPT - Avec l'option -u, spécifier une option de pver permettant de choisir la - version de la nouvelle release. Les options supportées sont -v, -l, -a, - -b, -r et -R. Par exemple, si la version actuelle sur la branche master - est 0.2.3, les options '-uz -v-lbeta' permettent de préparer la release - 0.3.0-beta - En principe, cette option n'a pas à être utilisée, puisque dans une - branche de release, on peut faire vivre les versions de pré-release - jusqu'à la release finale. Ainsi, la branche de release est nommée - d'après la version finale, mais le projet peut recevoir une version de - pré-release incrémentale. - -w, --write - Si une nouvelle branche est créée avec -u, mettre à jour le fichier - VERSION.txt avec pver. C'est l'option par défaut. - -n, --no-write - Si une nouvelle branche est créée avec -u, NE PAS mettre à jour le - fichier VERSION.txt avec pver. Utiliser cette option si la mise à jour - du numéro de version doit être faite d'une manière particulière. - -e, --edit - Editer le fichier CHANGES.txt autogénéré par -u -w - Cette option est surtout utile si -m est utilisé avec -u, pour donner la - possibilité de corriger la liste des modifications avant leur - enregistrement définitif. - - -m, --merge - Si la branche actuelle est une branche de release, ou s'il existe une - branche de release, la merger dans master, puis dans develop, puis la - supprimer. Puis basculer sur la branche master. - S'il n'existe pas de branche de release, proposer de fusionner les - modifications de la branche develop dans la branche master, sans - préparer de branche de release au préalable. - --delete - Supprimer une branche de release, à condition qu'elle aie déjà été - entièrement fusionnée dans la branch master - --force-delete - Supprimer une branche de release, même si elle n'a pas encore été - fusionnée dans la branche master - - -s, --summary - Afficher la liste des différences entre la branche develop et la branche - master, comme elle serait générée par les options -u -w pour le fichier - CHANGES.txt - -l, --log - Afficher les modifications actuellement effectuée dans la branche de - release par rapport à develop. - -d, --diff - Afficher les modifications actuellement effectuée dans la branche de - release par rapport à develop, sous forme de diff. -}}}-
{{{ -pver: gérer des numéros de version selon les règles du versionage sémantique v2.0.0 (http://semver.org/) - -USAGE - pver [options] - -OPTIONS - -f, --file VERSIONFILE - Gérer le numéro de version se trouvant dans le fichier spécifié. Le - fichier est créé si nécessaire. C'est l'option par défaut si un fichier - nommé VERSION.txt se trouve dans le répertoire courant. - -e, --maven POMFILE - Gérer le numéro de version se trouvant dans le fichier pom.xml spécifié. - Le fichier DOIT exister. C'est l'option par défaut si un fichier nommé - pom.xml se trouve dans le répertoire courant. - -F, --file-string VERSIONFILE - Prendre pour valeur de départ le contenu du fichier VERSIONFILE (qui - vaut par défaut VERSION.txt) - -g, --git-string [branch:]VERSIONFILE - Prendre pour valeur de départ le contenu du fichier VERSIONFILE (qui - vaut par défaut VERSION.txt) dans la branche BRANCH (qui vaut par défaut - master) du dépôt git situé dans le répertoire courant. - -s, --string VERSION - Prendre pour valeur de départ le numéro de version spécifié - - --show - Afficher le numéro de version. C'est l'action par défaut - --allow-empty - Supporter que la version puisse ne pas être spécifiée ni trouvée. Dans - ce cas, ne pas assumer que la version effective est 0.0.0 - Avec --show et --update, ne rien afficher si la version est vide. - --check - Vérifier que le numéro de version est conforme aux règles du versionage - sémantique - --convert - --no-convert - Activer (resp. désactiver) la conversion automatique. Par défaut, si la - version est au format classique 'x.z[.p]-rDD/MM/YYYY', elle est - convertie automatiquement au format sémantique x.z.p+rYYYYMMDD - --eq VERSION - --ne VERSION - --lt VERSION - --le VERSION - --gt VERSION - --ge VERSION - --same VERSION - --diff VERSION - Comparer avec la version spécifiée. Les opérateurs --eq, --ne, --lt, - --le, --gt, et --ge ignorent l'identifiant de build (comme le demande la - règle du versionage sémantique). Les opérateurs --same et --diff - comparent aussi les identifiants de build. - -v, --set-version VERSION - Spécifier un nouveau numéro de version qui écrase la valeur actuelle. - Cette option ne devrait pas être utilisée en temps normal parce que cela - va contre les règles du versionage sémantique. - --prel - Spécifier un nouveau numéro de version qui écrase la valeur actuelle. Le - numéro de version est obtenu à partir du nom de la branche git courante, - qui doit être de la forme release-VERSION - -u, --update - Mettre à jour le numéro de version. - - --menu - Afficher un menu permettant de choisir le composant de la version à - incrémenter - -x, --major - Augmenter le numéro de version majeure - -z, --minor - Augmenter le numéro de version mineure. C'est la valeur par défaut. - -p, --patchlevel - Augmenter le numéro de patch - - -l, --prelease ID - Spécifier un identifiant de pré-release, à ajouter au numéro de version. - -a, --alpha - -b, --beta - -r, --rc - Spécifier une pré-release de type alpha, beta, ou rc. Si la version est - déjà dans ce type, augmenter la dernière valeur numérique des composants - de l'identifiant, e.g. alpha deviant alpha.1, beta-1.2 devient beta-1.3, - rc1 devient rc2 - XXX ces fonctions ne sont pas encore implémentées - -R, --final, --release - Supprimer l'identifiant de prérelease - - -m, --metadata ID - Spécifier un identifiant de build, à ajouter au numéro de version. - -M, --vcs-metadata - Spécifier l'identifiant à partir de la révision actuelle dans le - gestionnaire de version. Note: pour le moment, seul git est supporté. - --add-metadata ID - Ajouter l'identifiant spécifié à la valeur actuelle, au lieu de la - remplacer. Séparer l'identifiant de la valeur précédente avec un '.' -}}}-
{{{ -pz: faire une archive du projet - -USAGE - pz - -OPTIONS - -C, --projdir PROJDIR - Spécifier le répertoire de base du projet qui est dans git. Par défaut, - on travaille dans le répertoire courant et on laisse git trouver le - répertoire de base du projet. Avec cette option, le répertoire courant - est modifié avant de lancer les commandes git. - -d, --destdir DESTDIR - Spécifier le répertoire dans lequel générer l'archive. Par défaut, - prendre le répertoire parent du répertoire de base du dépôt. -}}}-
{{{ -Usage: reptyr [-s] PID - reptyr -l|-L [COMMAND [ARGS]] - -l Create a new pty pair and print the name of the slave. - if there are command-line arguments after -l - they are executed with REPTYR_PTY set to path of pty. - -L Like '-l', but also redirect the child's stdio to the slave. - -s Attach fds 0-2 on the target, even if it is not attached to a tty. - -h Print this help message and exit. - -v Print the version number and exit. - -V Print verbose debug output. -}}}-
{{{ -rmtildes: supprimer les fichiers *~ dans le répertoire courant - -USAGE - rmtildes [dir [glob]] - -Par défaut, dir==. et glob==*~ -}}}-
{{{ -rruns: Déploiement distant avec runs - -USAGE - rruns [-h hosts] [-T tmproot] rscriptname name=value... - rruns [-h hosts] [-T tmproot] @recipe name=value... - rruns [-h hosts] [-T tmproot] -f rscript name=value... - rruns [-h hosts] [-T tmproot] -r recipe name=value... - -Lancer ce script sans argument (hors options) est équivalent à le lancer avec -l'argument @default - -OPTIONS - -C Ne pas faire le déploiement. Configurer uniquement la connexion par clé - sur les hôtes distants spécifiés pour le user spécifié. Il faut pouvoir - se connecter par mot de passe pour configurer la connexion par clé. - Si l'on veut configurer la connexion par clé pour le user root, mais que - ce n'est pas possible de se connecter par mot de passe avec le user root - sur l'hôte distant, et qu'il existe un user sudoer sur l'hôte distant, - il est possible de faire la configuration avec '--configure root'. La - commande serait alors - rruns -h user@host --configure root - -T tmproot - Spécifier le répertoire temporaire sur l'hôte distant, comme par exemple - /var/tmp. Cette option est utile pour les vservers, qui ont par défaut - un /tmp minuscule de 16 Mo. - -S ssh - Spécifier le programme à utiliser pour la connection par ssh. - -h host - -h @hostsfile - Spécifier un ou plusieurs hôtes sur lequels faire le déploiement. Pour - spécifier plusieurs hôtes, il est possible d'utiliser plusieurs fois - l'option -h, ou spécifier en une seule fois plusieurs hôtes en les - séparant par un espace ou le caractère ':', e.g. 'host1 host2' ou - 'host1:host2'. Si la spécification contient les caractères { et }, - l'expansion est effectuée, e.g - -h 'root@{host1,host2}.univ.run' - Par défaut, la connexion sur l'hôte distant se fait avec l'utilisateur - root. Il est possible de spécifier un autre utilisateur avec la syntaxe - user@host, e.g -h user@host - La forme @hostsfile permet de lire la liste des hôtes depuis le fichier - hostsfile, à raison d'un hôte par ligne. - Si cette option n'est pas spécifiée, et que le répertoire courant est - dans un des répertoires de $RUNSHOSTSPATH, sélectionner l'hôte - correspondant. Sinon, l'utilisateur doit saisir l'hôte distant de façon - interactive. - -f RSCRIPT - Lancer le script individuel spécifié au lieu de chercher dans les - répertoires $RUNS{SCRIPTS,HOSTS}PATH - -r RECIPE - Lancer les scripts spécifiés dans le fichier de recettes individuel - spécifié. - -z Forcer la réinstallation des scripts qui se basent sur shouldrun/setdone - -o OUTPUT - Générer l'archive à lancer sur l'hôte distant au lieu de faire le - déploiement. Si plusieurs hôtes sont spécifiés, OUTPUT est considéré - comme un nom de base auquel est ajouté le nom de l'hôte sur lequel - l'archive doit être déployée. - --init - --no-init - Forcer (resp. empêcher) la création des répertoires d'hôte correspondant - aux hôtes spécifiés. Par défaut, la création des répertoires d'hôte est - effectuée uniquement si ce script est lancé sans argument. - --sysinfos - Après un déploiement réussi sur l'hôte distant, inscrire si ce n'est - déjà fait le résultat de la commande usysinfos dans le fichier - sysinfos.conf du répertoire d'hôte. - Cette option est automatiquement activée si ce script est lancé sans - argument (hors options). -}}}-
{{{ -ruinst: Déploiement distant avec uinst - -USAGE - ruinst [-h host] [-T tmproot] <file|archive|dir> [-- options de uinst] - -note: à cause d'une limitation de makeself, les options de uinst ne devraient -pas contenir d'espaces ni de caractères spéciaux. L'échappement de ces -caractères n'est pas garanti. - -OPTIONS - -C Ne pas faire le déploiement. Configurer uniquement la connexion par clé - sur les hôtes distants spécifiés pour le user spécifié. Il faut pouvoir - se connecter par mot de passe pour configurer la connexion par clé. - Si l'on veut configurer la connexion par clé pour le user root, mais que - ce n'est pas possible de se connecter par mot de passe avec le user root - sur l'hôte distant, et qu'il existe un user sudoer sur l'hôte distant, - il est possible de faire la configuration avec '--configure root'. La - commande serait alors - ruinst -h user@host --configure root - Si l'hôte distant n'a pas sudo ou si sudo n'est pas configuré, il faut - rajouter l'option --uses-su, e.g: - ruinst -h user@host --configure root --uses-su - -T tmproot - Spécifier le répertoire temporaire sur l'hôte distant, comme par exemple - /var/tmp. Cette option est utile pour les vservers, qui ont par défaut - un /tmp minuscule de 16 Mo. - -S, --ssh ssh - Spécifier le programme à utiliser pour la connection par ssh. - -h hosts - -h @hostsfile - Spécifier un ou plusieurs hôtes sur lequels faire le déploiement. Pour - spécifier plusieurs hôtes, il est possible d'utiliser plusieurs fois - l'option -h, ou spécifier en une seule fois plusieurs hôtes en les - séparant par un espace ou le caractère ':', e.g. 'host1 host2' ou - 'host1:host2'. Si la spécification contient les caractères { et }, - l'expansion est effectuée, e.g - -h 'root@{host1,host2}.univ.run' - Par défaut, la connexion sur l'hôte distant se fait avec l'utilisateur - root. Il est possible de spécifier un autre utilisateur avec la syntaxe - user@host, e.g -h user@host - La forme @hostsfile permet de lire la liste des hôtes depuis le fichier - hostsfile, à raison d'un hôte par ligne. -}}}-
{{{ -rumount: démonter un système de fichier récursivement - -USAGE - rumount mountpoint - -Démonter tous les systèmes de fichiers qui sont montés en-dessous de mountpoint -puis démonter mountpoint. Démonter aussi tous les systèmes de fichiers -bind-montés à partir d'un sous-répertoire de mountpoint. -}}}-
{{{ -runs: Lancer un script avec le protocole runs - -USAGE - runs [options] rscriptname name=value... - runs [options] @recipe name=value... - runs [options] -f rscript name=value... - runs [options] -r recipe name=value... - -OPTIONS -Configuration - --init - --verify - Vérifier le nom d'hôte et créer si nécessaire le répertoire d'hôte - correspondant à l'hôte courant ou à l'hôte spécifié avec l'option -h - Avec --verify, la création du répertoire d'hôte n'est pas effectuée. - --sysinfos DATA - Avec l'option --init, initialiser le fichier sysinfos.conf avec DATA, si - le fichier n'a pas déjà été provisionné. Sans cette option, un fichier - vide avec des commentaires est créé à la place. - --create RSCRIPT - Créer un modèle de script avec le nom donné. - Avec l'option -h, le script est créé dans le répertoire d'hôte - correspondant à l'hôte spécifié - -Gestion des scripts - -s Forcer l'exécution du script avec l'utilisateur root si ce n'est pas - déjà le cas - -f RSCRIPT - Lancer le script individuel spécifié au lieu de chercher dans les - répertoires de $RUNSSCRIPTSPATH - -r RECIPE - Lancer les scripts spécifiés dans le fichier de recettes individuel - spécifié. - -h HOSTNAME[.DOMAIN] - Spécifier que les scripts sont destinés à être lancés sur l'hôte - spécifié. Les scripts sont alors aussi cherchés dans les répertoires - {$RUNSHOSTSPATH}/$hostname.$domain (par défaut) et - {$RUNSHOSTSPATH}/$domain/$hostname (le cas échéant) - L'option --host est équivalente, sauf que son argument est facultatif et - que sa valeur par défaut est l'hôte courant, soit sulfure - --list - Afficher la liste des scripts qui sont disponibles. Avec l'option -h, - inclure aussi les scripts spécifiques à cet hôte. - Avec cette option, les arguments supplémentaires agissent comme des - filtres (regexp utilisée avec l'opérateur == de la commande [[). Les - noms des scripts doivent valider au moins un filtre. - --info - Afficher la la description du script et la valeur de chaque variable - définies - --desc-only - Afficher seulement la description du script - -z Forcer la réinstallation des scripts qui se basent sur shouldrun/setdone -}}}-
{{{ -runsconfig: Gérer un répertoire d'hôte de runs - -USAGE - runsconfig -c [host [destdir]] - runsconfig -t -- args... - -OPTIONS - -c, --create - Créer un nouveau répertoire de configuration pour un hôte - -d, --destdir DESTDIR[=runs] - Nom du répertoire local de configuration. - - -t, --template [OPT] - Gérer les fichiers du répertoire local avec templatectl. La valeur de - cette option est utilisée comme argument court pour l'invocation de - templatectl, e.g - runsconfig -tm args - est équivalent à - templatectl -m args - Les arguments qui restent sont passés tels quels à templatectl - Les options courantes de templatectl -l, -v, -m, -L sont disponibles - directement - --help-template - Afficher l'aide concernent la gestion des templates. - Equivalent à -t -- --help - -h, --host HOST - Spécifier l'hôte. Equivalent à -v host=HOST -}}}-
{{{ -runsmod: récupérer des dépôts git à usage de runs - -USAGE - runsmod [options] [-h host] [modules...] - -Tous les dépôts spécifiés dans la configuration sont récupérés. Si des modules -sont spécifiés, les dépôts correspondants sont récupérés aussi. Avec l'option --h, des dépôts spécifiques à l'hôte peuvent éventuellement être récupérés en -plus. - -OPTIONS - -c, --config CONFIG - Spécifier un fichier de configuration à charger au lieu de la valeur par - défaut ~/etc/default/runs - --prod - --devel - Forcer un mode de sélection des urls. En mode production, préférer pour - le clonage les urls de production, qui sont en principe accessibles sans - authentification et en lecture seule. En mode développement, préférer - pour le clonage les urls de développement, qui sont en principe - accessibles par clé ssh et en lecture/écriture - --no-fetch - Ne rien récupérer. Utile avec --update-repolist - -N, --no-host - -A, --all-hosts - -H, -h, --host HOST - -T, --this-host - Options permettant de spécifier l'hôte pour la récupération de dépôts - spécifiques. - --no-host demande explicitement à ce qu'aucun hôte ne soit spécifié - --all-hosts sélectionne tous les dépôts spécifiques - --host récupère uniquement les dépôts pour l'hôte spécifié - --this-host équivaut à --host sulfure - L'option par défaut est --this-host en mode production et --all-hosts en - mode développement - --update-repolist - Forcer la mise à jour de la liste des dépôts. En principe, cette mise à - jour n'est pas faite plus d'une fois par période de 24 heures. - -0, --offline - -n, --no-pull - -u, --pull - Spécifier le mode opératoire pour la récupération des dépôts. - En mode --offline, ni clone ni pull ne sont autorisés. Le module doit - avoir déjà été cloné. - En mode --no-pull, seul le clonage est autorisé, e.g. le dépôt est - cloné si ce n'est pas déjà le cas. - En mode --pull, cloner le dépôt si ce n'est pas déjà le cas, ou le - mettre à jour le dépôt avant de l'utiliser s'il avait déjà été cloné. - Par défaut, utiliser --pull en mode production et --no-pull en mode - développement. - -i, --identity IDENTITY_FILE - Spécifier le fichier depuis lequel lire la clé privée pour les - connexions par ssh. - -o, --output OUTPUT - Spécifier un fichier dans lequel écrire des définitions de variables, - notamment REPODIRS qui reçoit la liste des chemins des dépôts qui ont - été récupérés. De plus, les variables RUNSSCRIPTSPATH, RUNSMODULESPATH - et RUNSHOSTSPATH sont définies. - -a, --append-output - Ajouter au fichier OUTPUT au lieu de l'écraser -}}}-
{{{ -rwoinst: Déploiement distant avec woinst - -USAGE - rwoinst [-H host] [-T tmproot] <file|archive|dir>... [-- options de woinst] - -OPTIONS - -C Ne pas faire le déploiement. Configurer uniquement la connexion par clé - sur les hôtes distants spécifiés pour le user spécifié. Il faut pouvoir - se connecter par mot de passe pour configurer la connexion par clé. - Si l'on veut configurer la connexion par clé pour le user root, mais que - ce n'est pas possible de se connecter par mot de passe avec le user root - sur l'hôte distant, et qu'il existe un user sudoer sur l'hôte distant, - il est possible de faire la configuration avec '--configure root'. La - commande serait alors - rwoinst -H user@host --configure root - -T tmproot - Spécifier le répertoire temporaire sur l'hôte distant, comme par exemple - /var/tmp. Cette option est utile pour les vservers, qui ont par défaut - un /tmp minuscule de 16 Mo. - -S ssh - Spécifier le programme à utiliser pour la connection par ssh. - -H host - Spécifier un hôte distant sur lequel faire le déploiement. Plusieurs - options -H peuvent être spécifiées, ou alors on peut séparer plusieurs - hôtes par ':', e.g. -H host1:host2 - Par défaut, la connexion sur l'hôte distant se fait avec l'utilisateur - root. Il est possible de spécifier un autre utilisateur avec la syntaxe - user@host, e.g -H user@host -}}}-
{{{ -USAGE: - sqlcsv [query] - -query est la requête SQL à exécuter. Si query n'est pas spécifiée ou si elle - vaut '-', la requête SQL est lue sur l'entrée standard, ou depuis un - fichier si l'option -f est spécifiée. - -DEMARRAGE - -Au démarrage, les répertoires de configuration (utilisateur ~/.sqlcsv et système -/etc/sqlcsv) sont analysés. Les fichiers *.jar situés dans ces répertoires sont -ajoutés au CLASSPATH. La présence de certains fichiers est testée pour activer -éventuellement les logs détaillés. - -OPTIONS - -C, --config CONFIG - Prendre les informations de connexion depuis le fichier de propriété - spécifié. Pour l'identifiant CONN, la propriété 'CONN.url' doit exister - dans ce fichier avec la valeur de l'url jdbc de connexion. De plus, les - propriétés 'CONN.user' et 'CONN.password' contiennent respectivement si - nécessaire le nom et le mot de passe de connexion. La propriété - 'loglevel', si elle existe, est utilisée pour configurer le niveau - d'affichage des logs, comme avec l'option --loglevel - Si cette option n'est pas spécifiée, un fichier nommé sqlcsv.properties - est recherché dans l'ordre: dans le répertoire courant, dans le - répertoire de configuration utilisateur, puis dans le répertoire de - configuration système. Si le fichier est trouvé, il est chargé - automatiquement. - -l, --conn CONN - Spécifier l'identifiant (ou l'url) de connexion. Cette information est - obligatoire. Si cette option n'est pas fournie, il faut spécifier un - fichier de configuration avec l'option -C dans lequel *une seule* - propriété 'CONN.url' est définie. - -u, --user USER - -p, --password PASSWORD - Spécifier un nom de connexion et un mot de passe si l'url ne le fournit - pas. Ces valeurs ont la priorité sur les valeurs éventuellement déjà - présentes dans le fichier de propriété. - -f, --input INPUT - Lire la requête depuis le fichier INPUT au lieu de la lire depuis la - ligne de commande ou l'entrée standard. Ne pas spécifier cette option ou - utiliser '-' pour lire depuis l'entrée standard. Cette option est - ignorée si la requête est fournie sur la ligne de commande. - -o, --output OUTPUT - Ecrire le résultat dans le fichier OUTPUT. Utiliser '-' pour spécifier - la sortie standard (c'est la valeur par défaut). S'il y a plusieurs - requêtes et que le fichier de sortie n'est pas la sortie standard, - ajouter un numéro incrémental au nom du fichier en sortie pour chaque - requête. Sinon, il est possible de spécifier plusieurs fois cette option - pour nommer les fichiers correspondant à chaque requête. - -t, --autocommit - Activer le mode autocommit - -c, --ignore-io-error - Continuer le traitement même en cas d'erreur du système de fichiers. - Cependant le traitement s'arrête et la transaction est annulée si une - autre erreur se produit. - -y, --ignore-any-error - Continuer le traitement même en cas d'erreur quelconque. - -n, --no-headers - Ne JAMAIS inclure les en-têtes dans la sortie, même avec l'option -h - -a, --append - Ajouter le résultat au fichier OUTPUT au lieu de l'écraser. - -A, --auto-na - Activer les option -n -a si le fichier OUTPUT existe et qu'il est non - vide. Le test n'est effectué que pour le premier fichier spécifié. - -s, --same-output - Utiliser le même fichier pour écrire le résultat de toutes les requêtes. - Normalement, un numéro incrémental est ajouté au fichier en sortie si - plusieurs requêtes sont spécifiées. Si les en-têtes sont les mêmes, - ajouter le résultat au fichier directement à la suite. Sinon, sauter une - ligne blanche et afficher les nouveaux en-têtes. - -h, --force-headers - En cas d'écriture du résultat de plusieurs requêtes dans un même - fichier, ne pas tenter de concaténer les résultats même si les en-têtes - sont les mêmes. - --uc-output - Ajouter dans la sortie les résultat de toutes les requêtes, pas - seulement celles de type DQML - --loglevel LOGLEVEL - Spécifier le niveau de logs à afficher. Les valeurs valides sont à - choisir parmi ALL, FINEST, FINER, FINE, CONFIG, INFO, WARNING, ERROR - La présence de certains fichiers dans les répertoires de configuration - utilisateur ou système configure les logs avant que les options de la - ligne de commande ne soient analysés: un fichier DEBUG fait démarrer - l'application avec le niveau de log ALL ce qui permet de voir les logs - concernant le chargement des jar. Un fichier SQL_DEBUG permet d'activer - la trace de DriverManager. Exemple: - mkdir -p ~/.sqlcsv && touch ~/.sqlcsv/{DEBUG,SQL_DEBUG} -}}}-
{{{ -twsync: synchroniser un répertoire de wiki avec un tiddlywiki - -USAGE - twsync [options] - -Un répertoire de wiki est un répertoire où chaque page est contenu dans un -fichier avec l'extension .twp -Un tiddlywiki est un fichier html contenant le code de TiddlyWiki et les données -associées. - -OPTIONS - -d wikidir - -f wikifile - Spécifier le répertoire de wiki et le tiddlywiki à traiter. Par défaut, - il s'agit de wiki.html dans le répertoire courant. - -u Importer les pages de wikidir dans le tiddlywiki. Utiliser cette action - quand les pages de wikidir sont modifiées et qu'il faut mettre à jour le - tiddlywiki. - Il s'agit de l'action par défaut - --force - Forcer l'importation des pages même si les tiddlers correspondant sont - plus récents dans le tiddlywiki - Forcer aussi la regénération de wikifile même si aucune modification n'a - été détectée - -e Exporter les tiddlers du tiddlywiki vers wikidir. Utiliser cette action - quand le tiddlywiki a été modifié, et qu'il faut synchroniser wikidir - avec les dernières modifications. - -U Mettre à jour le fichier wikifile avec la dernière version de tiddlywiki - située dans ~/wop/modules/nutools/lib/tiddlywiki/empty.html -}}}-
{{{ -uawk: wrapper pour des outils implémentés en awk - -USAGE - uawk TOOL args... - -Les noms d'outils valides sont: awkrun awkcsv grepcsv awkfsv2csv mergecsv sortcsv dumpcsv printcsv -Utiliser l'option --help pour obtenir de l'aide sur chacun des outils -}}}-
{{{ -ubackup: faire une sauvegarde des fichiers - -USAGE - ubackup [options] - -OPTIONS - -l Lister les profils de sauvegarde disponibles. - -p Spécifier le profil de sauvegarde à effectuer. Par défaut, toutes les - sauvegardes sont effectuées. - -u USER - Faire le sauvegarde pour l'utilisateur $USER. Cette option n'est valide - que pour l'utilisateur root. - -n Afficher ce qui doit être fait plutôt que de le faire - -H Arrêter la machine après une sauvegarde REUSSIE. -}}}-
{{{ -ucalc: Afficher une valeur dans plusieurs unités - -USAGE - ucalc value - -Sans suffixe, la valeur est exprimée en octets. Sinon, elle peut être suffixée -pour spécifier l'unité dans laquelle est exprimée la valeur: - K,M,G,T -- Kibi (1024), Mibi (1024^2), Gibi (1024^3), Tebi (1024^4) - k,m,g,t -- Kilo (1000), Mega (1000^2), Giga (1000^3), Tera (1000^4) - s -- secteurs de 512 octets - S -- secteurs de 2048 octets - p -- pages de 4096 octets - c -- cylindres (si l'option -c est spécifiée) - b -- octets - -OPTIONS - -u UNIT - Spécifier l'unité de value. Le suffixe qui est éventuellement sur value - est ignoré. - -o UNIT - Spécifier l'unité en sortie. Par défaut, afficher la valeur dans toutes - les unités supportées. - -c VALUE - Taille d'un cylindre en octets, pour permettre l'affichage des valeurs - en cylindres -}}}-
{{{ -uconf: Activer ou désactiver un paramètre dans un fichier de configuration - -USAGE - uconf [options] config name[=value]... - -OPTIONS - -e - Activer le paramètre (par défaut). Si le paramètre existe, mais est - commenté, il est décommenté. Si une valeur est spécifiée pour le - paramètre, le paramètre est modifié dans le fichier en conséquence. - -q - Cette option s'utilise avec l'option -e et le type shell. Elle permet - de s'assurer que les valeurs ayant des espaces et/ou des caractères - spéciaux sont quotées - -d - Désactiver le paramètre. Le paramètre est commenté s'il existe dans le - fichier - -a - Ajouter une valeur à la variable, ou un paramètre avec cette valeur - (suivant le type de fichier de configuration) - -A - Ajouter une valeur au tableau, ou un paramètre avec cette valeur - (suivant le type de fichier de configuration) - -t TYPE - Type de fichier de configuration. TYPE peut être sh (par défaut), apache - ou mysql. - shell - les paramètres sont de la forme 'name=value', et les commentaires - débutent par '#'. Ce type peut être utilisé pour tous les fichiers - ayant ces caractéristiques, dont les fichiers de script shell - apache - les paramètres sont de la forme 'name value', et les commentaires - débutent par '#'. Ce type peut être utilisé pour tous les fichiers - ayant ces caractéristiques, dont les fichiers de configuration - apache - mysql, php - les paramètres sont dans des sections nommées de la forme [section], - sont de la forme 'name=value', et les commentaires débutent par '#' - ou ';' - Ce type peut être utilisé pour tous les fichiers ayant ces - caractéristiques, dont les fichiers de configuration de mysql et de - php. Avec ce type, la section est obligatoire. - -s SECTION - Avec le type mysql, préciser la section dans laquelle inscrire le - paramètre. Attention! La section DOIT exister, elle n'est pas créée - automatiquement. -}}}-
{{{ -ucrontab: Ajouter/Supprimer une ligne dans crontab - -USAGE - ucrontab [options] ctline - -OPTIONS - -a Ajouter la ligne dans le fichier crontab (par défaut) - -r Enlever la ligne dans le fichier crontab - -u user - Spécifier l'utilisateur pour lequel on modifie crontab. Par défaut, - modifier le crontab de root - -H host:hosts... - Modifier le crontab sur les hôtes distants spécifiés. Avec l'hôte '.' ou - 'localhost', la modification est faite sur l'hôte local - Si l'action est -a, un script 'undo-ucrontab.sh' est créé dans le - répertoire courant, qui annule la planification. Il est possible de - lancer ce script le lendemain pour enlever les planifications - installées. - ctline - Ligne de crontab de la forme 'minutes hours days months dows command' - Si la ligne est de la forme halt[@hh:mm], la commande 'shutdown -h now' - est planifiée pour le LENDEMAIN à hh:mm. si hh:mm n'est pas spécifié, - l'arrêt est planifié pour 7:00 - -t hh:mm - Ignorer la partie 'minutes hours days months dows' de ctline, et la - remplacer par une planification à hh:mm le LENDEMAIN. - --dom dayOfMonth - --month month - Spécifier respectivement le jour du mois et le mois (1-12) auquel faire - la planification. Par défaut, les planifications sont effectuées pour le - LENDEMAIN. Il est conseillé de spécifier les deux arguments si le jour - doit être fixé. - -s cmdfile - Spécifier un fichier, dont le contenu est utilisé pour générer le script - qui est planifié. Le fichier doit contenir l'ensemble des commandes à - exécuter. Le script est modifié pour s'autodétruire à la fin de son - exécution. Si ce comportement n'est pas souhaité, il faut rajouter la - commande 'exit 0' à la fin. - -S cmd - Comme -s, mais spécifier le contenu du fichier directement sur la ligne - de commande. - -f hostsfile - Spécifier un fichier qui contient la liste des hôtes sur lesquels faire - les planifications. - Les options -s, -S, -H, -d, -n sont ignorées. L'option --add est valide - jusqu'au premier @group du fichier. Voici le format de ce fichier: - - Un groupe d'hôte débute par une ligne de la forme '@group:adelay:gdelay' - - adelay est le nombre de minutes à laisser passer entre les hôtes du - groupe (par défaut 1) - - gdelay est le nombre de minutes à laisser passer après le traitement - du groupe (par défaut 15) - Les autres lignes sont des hôtes sur lequels planifier l'opération, de - la forme 'host:cmd' - - host est un nom d'hôte pleinement qualifié, sur lequel il est possible - de se connecter par clé. - - cmd est une description de la commande à lancer pour effectuer - l'opération planifiée. Utiliser la syntaxe '<script' pour prendre le - contenu du fichier de script spécifié. Le script est copié dans un - fichier temporaire sur l'hôte, et se supprime après son - lancement. Sinon, la commande spécifiée est utilisée telle quelle. Si - cmd n'est pas spécifié, prendre la commande par défaut donnée par - ctline - Les lignes vides et commençant par '#' sont ignorées - La commande '@include:file' permet d'inclure un autre fichier - - -d Activer l'incrémentation automatique des heures de planification entre - chaque hôte. Ceci permet par exemple de planifier l'arrêt d'un certain - nombre de machines dans un ordre précis, en horaire décalé. - Cette option est activée par défaut si ctline==halt[@time] - -n Désactiver l'incrémentation automatique des heures de planification. - --add ADELAY - Spécifier le nombre de minutes entre chaque hôte pour l'incrémentation - automatique des heures de planification. Par défaut, il y a 1 minute - entre chaque hôte. - --us undo-script - Spécifier le nom du script qui annule la planification. Utiliser "" - pour désactiver cette fonctionnalité. - --fake - Afficher simplement les modifications qui doivent être effectuées. -}}}-
{{{ -udaemon.cgo: start a program as a daemon - -USAGE - udaemon.cgo /path/to/prog [args...] - -OPTIONS - -d DESTDIR - Change to DESTDIR instead of "/" before starting the program -}}}-
{{{ -udir: gérer les variables de répertoire - -USAGE - udir [options] [dir [name=value...]] - -Par défaut, mettre à jour les variables du répertoire avec les définitions -données. Attention! Les définitions sont insérées *telles quelles* dans le -fichier. Par exemple, pour définir une variable qui contient des espaces, -on pourra faire: - udir /path/to/dir 'var="value with spaces"' -pour définir un tableau: - udir /path/to/dir 'array=(first second)' - -OPTIONS - -i, --show-desc - -n, --show-note - Afficher la description du répertoire. C'est l'action par défaut si ce - script est lancé *sans argument* - -d, --dump - Afficher toutes les variables définies pour le répertoire 'dir'. - -x, --eval 'CMDS;...' - Exécuter les commandes dans le contexte des variables définies pour le - répertoire. - -e, --edit - Editer les variables du répertoire - --local-vars - Avec -d, ajouter des directives 'local' aux définitions de variables - -A, --all-parents - Avec -d et -x, considérer les variables de tous les répertoires parents - jusqu'à la racine. Pour ne considérer que les variables du répertoire - spécifié (par défaut), utiliser --local-only - --help-vars - Afficher une descriptions des variables spécifiques aux outils de nutools -}}}-
{{{ -udist: gestion d'une distribution upstream - -Des fichiers de configuration (par exemple) sont distribués par un partenaire, -et il faut maintenir des modifications locales, tout en acceptant les mises à -jour provenant de l'upstream. Ce script aide à maintenir un tel scénario. - -En général, la distribution upstream identifie les fichiers modifiables en leur -donnant une extension particulière, par exemple 'file.origine' ou 'file.default' -La liste des extensions reconnues est spécifiée avec l'option -s. Lors de leur -intégration dans le répertoire local, ces fichiers sont copiés sans cette -extension. - -Terminologie: Les fichiers pour lesquels il faut maintenir une version locale -sont appelés 'fichiers locaux', qu'ils viennent de la distribution upstream ou -non. Les autres fichiers qui proviennent de la distribution sont appelés -'fichiers upstream'. - -USAGE - udist cmd [options] - -OPTIONS COMMUNES - -s .EXT - Ajouter une extension à la liste des extensions reconnues comme contenu - original modifiable dans la distribution upstream. Par défaut, les - extensions suivantes sont reconnues: - .udist .origine .default - Cette option peut être utilisée autant de fois que nécessaire. - --clear-origexts - Supprimer la liste par défaut des extensions origines. Cette option doit - être spécifiée avant l'option -s pour construire une nouvelle liste. - La liste des extensions ne doit pas être vide. Si c'est le cas, elle est - modifiée pour contenir l'unique élément (.udist) - -d WORKDIR - Spécifier le répertoire de travail. Par défaut, la racine du répertoire - de travail est cherchée à partir du répertoire courant. - --help - Afficher l'aide détaillée de la commande spécifiée - -COMMANDES - init [WORKDIR [ARCHIVE]] - Initialiser un répertoire de travail pour contenir une distribution - upstream - - upstream-new, new SRCDIR|ARCHIVE [WORKDIR] - Intégrer une nouvelle distribution upstream. - Les nouveaux fichiers sont copiés tout de suite dans le répertoire de - travail. Par contre, les modifications ne sont intégrées qu'avec la - commande patch - upstream-clear, clear [WORKDIR] - Supprimer tous les fichiers non modifiés de l'upstream. - - local-create, create FILE - Créer et/ou identifier FILE comme une modification locale par rapport à - l'upstream. - local-edit, edit FILE - S'assurer que local-create a été exécuté si nécessaire pour FILE, puis - l'éditer avec vim - - local-copy, cp SRCFILE DESTFILE - local-move, mv SRCFILE DESTFILE - local-remove, rm FILE - Frontend pour respectivement cp, mv et rm. Ces commandes agissent aussi - sur les fichiers orig et de tag. - - local-tag, tag FILE TAG - Faire une copie du fichier local avec le tag spécifié. Si le fichier de - tag existe déjà, il est écrasé. - local-switch, switch TAG FILE - Sélectionner la copie avec le tag spécifié. - - local-put, put [WORKDIR] DESTDIR - Copier tous les fichiers locaux dans DESTDIR, par exemple pour faire une - sauvegarde. Si DESTDIR n'est pas spécifié, prendre la valeur de - l'origine, affichée par local-list - local-get, get [-l|-s] SRCDIR [WORKDIR] - Opération inverse de local-put: intégrer tous les fichiers de SRCDIR - comme fichiers locaux. Si SRCDIR n'est pas spécifié, prendre la valeur - de l'origine, affichée par local-list - local-list, list [WORKDIR] - Lister tous les fichiers locaux. Les fichiers pour lesquels il faut - intégrer une modification de l'upstream avec la commande local-patch - sont identifiés visuellement. - - upstream-diff, udiff [FILE] - Après intégration d'une nouvelle distribution upstream, afficher les - modifications entre la nouvelle distribution upstream et l'ancienne pour - tous les fichiers modifiables - local-diff, ldiff [FILE] - Afficher les modifications locales par rapport à l'upstream pour le(s) - fichier(s) spécifié(s). - local-patch, lpatch [FILE] - Après intégration d'une nouvelle distribution upstream, appliquer au(x) - le(s) fichier(s) spécifié(s) les modifications disponibles affichées par - upstream-diff. - local-forget, lforget [FILE] - Après intégration d'une nouvelle distribution upstream, oublier les - modifications disponibles pour le(s) fichier(s) spécifié(s). -}}}-
{{{ -uenv: Mettre à jour la configuration de l'environnement - -USAGE - uenv [-u [projdirs...]] - -Cette commande met à jour l'ordre de chargement des fichiers de configuration -dans ~/etc/{profile.d,bashrc.d}. Elle est donc utile si ces fichiers ont été -modifiés manuellement, ou si un fichier a été ajouté manuellement. - -OPTIONS - HOME=/path/to/homedir - Spécifier le chemin vers ~ - Cette option doit être placée avant les valeurs projdirs. - -u, --update - Installer ou mettre à jour les fichiers de profil des projets spécifiés: - Les fichiers ~/.profile, ~/.bash_profile et ~/.bashrc sont vérifiés et - corriger automatiquement pour inclure les fichiers de nutools. - Ensuite, les fichiers de profil sont copié dans les répertoires - ~/etc/{profile.d,bashrc.d,default} - Les projets spécifiés *doivent* être configurés avec uinst -C, et - définir la valeur install_profiles=true dans leur fichier .udir - Si aucun projet n'est spécifié, prendre les fichiers de profil de - nutools. - -l, --local-profiles - Avec l'option -u, installer les profils locaux comme tels. Pour les - fichiers de profil qui sont indiqués comme non partagés, les copier dans - des répertoires spécifiques de la forme {profile,bashrc}.HOSTNAME.d et - default.HOSTNAME - -s, --shared-profiles - Installer les profils locaux comme des profils partagés. C'est l'option - par défaut. -}}}-
{{{ -ufixmod: forcer le mode d'une liste de fichiers - -USAGE - ufixmod [options] [dirs|files....] - -Le mode forcé pour les répertoires est rwxr-xr-x -Le mode forcé pour les fichiers est rw-r--r-- - -OPTIONS - -x, --executable - Forcer le mode rwX-r-Xr-X pour les fichiers -}}}-
{{{ -ugenpass: générer un mot de passe au hasard - -USAGE - ugenpass [options] - -OPTIONS - -l, --len LEN - Spécifier le nombre de caractères du mot de passe généré - -U, --upper COUNT - -L, --lower COUNT - -A, --alpha COUNT - -N, --number COUNT - -S, --symbol COUNT - -B, --special COUNT - Spécifier le nombre minimum de chaque classe de caractère -}}}-
{{{ -uinc.py: Plier/déplier des inclusions dans un fichier - -USAGE - uinc.py [[options] dest...] - -OPTIONS - -f Plier les inclusions - -u Déplier les inclusions (par défaut) - -@ Forcer le caractère '@' pour le pliage/dépliage - -* Forcer le caractère '*' pour le pliage/dépliage - --auto - Activer la recherche automatique de paramètres (par défaut) - --noauto - Désactiver la recherche automatique de paramètres - -I SPEC - Spécifier des fichiers à inclure dans les répertoires spécifiés - -X SPEC - Spécifier des fichiers à exclure dans les répertoires spécifiés - --refdir REFDIR - Spécifier le répertoire de référence. Soit un répertoire DEST spécifié - dans les arguments. Si un fichier à inclure *n'est pas* un fils du - répertoire DEST, l'emplacement effectif du fichier est calculé en - faisant comme si DEST==REFDIR. - Par exemple, soit DEST=/dest/path et REFDIR=/refdir/path. Si le fichier - /dest/path/file inclue le fichier ../inc, alors c'est le fichier - /refdir/inc qui est considéré. - Ceci permet de traiter les inclusions dans une copie temporaire d'un - répertoire, dans le cas où les fichier font référence à d'autres - fichiers situés relativement à l'emplacement original. - -Les spécifications de fichiers sont de types glob: ils peuvent contenir les -wildcards * et ?. Ils supportent en plus la chaine '**' qui signifie n'importe -quelle profondeur de répertoire. 'dir/' est équivalent à 'dir/**' et signifie -tous les fichiers situés dans l'arborescence à partir de dir. - -La variable UINCPATH contient une liste de répertoires qui sont consultés pour -trouver les fichiers à inclure. -}}}-
{{{ -uinc.py: Plier/déplier des inclusions dans un fichier - -USAGE - uinc.py [[options] dest...] - -OPTIONS - -f Plier les inclusions - -u Déplier les inclusions (par défaut) - -@ Forcer le caractère '@' pour le pliage/dépliage - -* Forcer le caractère '*' pour le pliage/dépliage - --auto - Activer la recherche automatique de paramètres (par défaut) - --noauto - Désactiver la recherche automatique de paramètres - -I SPEC - Spécifier des fichiers à inclure dans les répertoires spécifiés - -X SPEC - Spécifier des fichiers à exclure dans les répertoires spécifiés - --refdir REFDIR - Spécifier le répertoire de référence. Soit un répertoire DEST spécifié - dans les arguments. Si un fichier à inclure *n'est pas* un fils du - répertoire DEST, l'emplacement effectif du fichier est calculé en - faisant comme si DEST==REFDIR. - Par exemple, soit DEST=/dest/path et REFDIR=/refdir/path. Si le fichier - /dest/path/file inclue le fichier ../inc, alors c'est le fichier - /refdir/inc qui est considéré. - Ceci permet de traiter les inclusions dans une copie temporaire d'un - répertoire, dans le cas où les fichier font référence à d'autres - fichiers situés relativement à l'emplacement original. - -Les spécifications de fichiers sont de types glob: ils peuvent contenir les -wildcards * et ?. Ils supportent en plus la chaine '**' qui signifie n'importe -quelle profondeur de répertoire. 'dir/' est équivalent à 'dir/**' et signifie -tous les fichiers situés dans l'arborescence à partir de dir. - -La variable UINCPATH contient une liste de répertoires qui sont consultés pour -trouver les fichiers à inclure. -}}}-
{{{ -uinst.sh: Déployer en local un fichier, une archive, ou un répertoire - -USAGE - uinst.sh [options] <file|archive|dir> - -OPTIONS - var=value - Spécifier la valeur d'une variable ou d'un préfixe, plutôt que de - laisser uprefix l'autodétecter. Utiliser 'uprefix -l' pour avoir une - liste de préfixes valides. Utiliser 'udir --help-vars' pour avoir une - liste de variables valides pour uinst.sh. - -d /path/to/destdir - Spécifier le répertoire destination, exactement comme si la valeur - destdir avait été spécifiée, i.e destdir="/path/to/destdir" - -h, --host [user@]host - Avec la méthode de déploiement uinst:rsync, permettre de spécifier un - hôte différent. Cette option est ignorée pour les autres méthodes de - déploiement. Si host vaut localhost, un déploiement local avec ssh est - effectué. Si host vaut '.', un déploiement local *sans passer par ssh* - est effectué, comme si seul le chemin avait été spécifié. - Cette option initialise la valeur destdir_override_userhost - -S, --ssh ssh - Avec la méthode de déploiement uinst:rsync, spécifier le programme à - utiliser pour la connection par ssh. Cette option initialise la valeur - destdir_ssh - --force-remote - Avec la méthode de déploiement uinst:rsync, si un hôte est spécifié dans - la valeur de destdir, forcer le déploiement distant avec ssh+rsync, même - si l'hôte et l'utilisateur correspondent aux valeurs courantes. Cette - option initialise la valeur destdir_force_remote - -a, --auto - Si la source n'est pas spécifiée, déterminer le répertoire à déployer - automatiquement (c'est la valeur par défaut) - --no-auto - Ne pas déterminer automatiquement le répertoire à déployer. - --prefix - Corriger les chemins srcdir et destdir qui commencent par des préfixes - valides (c'est la valeur par défaut). Utiliser 'uprefix -l' pour avoir - une liste de préfixes valides - --no-prefix - Ne jamais corriger un chemin. - --include-vcs - Inclure les fichiers de VCS dans les fichiers copiés. Par défaut, les - fichiers de VCS sont exclus. - -l, --local-profiles - Installer les profils locaux comme tels - --shared-profiles - Installer les profils locaux comme des profils partagés. C'est la valeur - par défaut pour compatibilité. - -C Configurer un répertoire pour le déploiement avec uinst - Ajouter l'option --force pour forcer la reconfiguration -}}}-
{{{ -uinst: Déployer en local un fichier, une archive, ou un répertoire - -USAGE - uinst [options] <file|archive|dir> - -OPTIONS - var=value - Spécifier la valeur d'une variable ou d'un préfixe, plutôt que de - laisser uprefix l'autodétecter. Utiliser 'uprefix -l' pour avoir une - liste de préfixes valides. Utiliser 'udir --help-vars' pour avoir une - liste de variables valides pour uinst. - -d /path/to/destdir - Spécifier le répertoire destination, exactement comme si la valeur - destdir avait été spécifiée, i.e destdir="/path/to/destdir" - -h, --host [user@]host - Avec la méthode de déploiement uinst:rsync, permettre de spécifier un - hôte différent. Cette option est ignorée pour les autres méthodes de - déploiement. Si host vaut localhost, un déploiement local avec ssh est - effectué. Si host vaut '.', un déploiement local *sans passer par ssh* - est effectué, comme si seul le chemin avait été spécifié. - Cette option initialise la valeur destdir_override_userhost - -S, --ssh ssh - Avec la méthode de déploiement uinst:rsync, spécifier le programme à - utiliser pour la connection par ssh. Cette option initialise la valeur - destdir_ssh - --force-remote - Avec la méthode de déploiement uinst:rsync, si un hôte est spécifié dans - la valeur de destdir, forcer le déploiement distant avec ssh+rsync, même - si l'hôte et l'utilisateur correspondent aux valeurs courantes. Cette - option initialise la valeur destdir_force_remote - -a, --auto - Si la source n'est pas spécifiée, déterminer le répertoire à déployer - automatiquement (c'est la valeur par défaut) - --no-auto - Ne pas déterminer automatiquement le répertoire à déployer. - --prefix - Corriger les chemins srcdir et destdir qui commencent par des préfixes - valides (c'est la valeur par défaut). Utiliser 'uprefix -l' pour avoir - une liste de préfixes valides - --no-prefix - Ne jamais corriger un chemin. - --include-vcs - Inclure les fichiers de VCS dans les fichiers copiés. Par défaut, les - fichiers de VCS sont exclus. - -l, --local-profiles - Installer les profils locaux comme tels - --shared-profiles - Installer les profils locaux comme des profils partagés. C'est la valeur - par défaut pour compatibilité. - -C Configurer un répertoire pour le déploiement avec uinst - Ajouter l'option --force pour forcer la reconfiguration -}}}-
{{{ -ujava: Lancer un script après avoir sélectionné une version de java - -USAGE - ujava [options] version [args...] - -OPTIONS - -b, --bits 32|64|auto - --32 - --64 - Sélectionner une version 32 ou 64 bits de java - -e, --exact - Sélectionner la version *exacte* de java demandée, au lieu de la version - minimum correspondant à la version demandée. - Si la version requise de java n'est pas trouvée, retourner avec le code - d'erreur 254. - -La version de java attendue peut-être exprimée de l'une des façons suivantes: -1.4 1.4+ 1.5 1.5+ 1.6 1.6+ 1.7 1.7+ -Si args n'est pas spécifié, un shell est lancé dans lequel les variables -JAVA_HOME, JAVA, JAVAC et PATH sont mis à jour. -}}}-
{{{ -uldap: Shell pour accéder à un serveur ldap - -USAGE - uldap [options] - -OPTIONS - -C profile - Sélectionner un profil de connexion. Par défaut, si l'option -H n'est - pas spécifiée, le premier profil est sélectionné. - -x Ne pas tenter de faire une connexion sur le profil par défaut si aucun - profil n'est sélectionné. - -f script - Lire les commandes depuis le script spécifié. - -n Avec un script donné en ligne de commande ou lu depuis un fichier, ne pas - ajouter automatiquement la commande print à la fin - -i Si un script est spécifié, passer en mode interactif après l'exécution - du script. - -e Forcer l'arrêt du script si une erreur se produit. C'est l'option par - défaut pour un script spécifié avec -f. - -l input.ldif - Charger le fichier input.ldif comme espace de travail initial - -H ldapuri - -D binddn - -w password - -b searchbase - -v var=value - -COMMANDES - $ cmd - Passer directement une commande au shell. - set [options] [var=value...] - Changer des options ou des variables. set sans argument affiche la liste - des variables définies. - [set] plain - Passer en mode 'plain': indiquer que l'espace de travail contient des - données brutes. Les pré-traitements et post-traitements (uncut_on_load, - decode_on_load, encode_on_save, cut_on_save) ne sont pas appliqués sur - cet espace de travail - [set] ldif - Passer en mode 'ldif': indiquer que l'espace de travail contient des - données ldif. Les pré-traitements et post-traitements sont appliqués - normalement sur cet espace de travail - [set] append - Pour certaines opérations, spécifier si le résultat de la *prochaine* - opération remplace le contenu de l'espace de travail courant (par - défaut), ou si le résultat est ajouté à la fin. - last - Afficher en mode édition la dernière commande. Cette commande n'est - fonctionnelle qu'avec une version de bash >=4.x - profile name - Choisir le profil 'name'. Equivalent à 'set profile=name'. Sans - argument, afficher la liste des profils valides. - auth anonymous|binddn [password] - Spécifier le compte à utiliser pour se connecter. Equivalent à - 'set binddn=binddn; set password=password' - clear [-k] - Vider l'espace de travail et passer en mode 'plain'. - Avec l'option -k, supprimer aussi tout l'historique d'annulation. - load [-k] input - Charger un fichier dans l'espace de travail. Si l'extension du fichier - est .ldif, passer en mode 'ldif' - En mode append, rajouter le contenu du fichier à l'espace de travail, - puis repasser en mode replace. - Le code de retour est 0 si le fichier a été chargé, 1 sinon. - save [-a] output - Sauvegarder l'espace de travail dans un fichier. - Avec l'option -a, rajouter au fichier au lieu de l'écraser - print - Afficher l'espace de travail - alias a=rdn... - Définir un alias pour la commande cd. 'a' est l'alias, 'rdn' est le dn - correspondant, exprimé par rapport à $suffix. Sans argument, afficher - la liste des aliases définis. - cd rdn - Changer searchbase. Par défaut, il s'agit d'un rdn relatif à $searchbase - - Certains aliases sont supportés: .. pour l'objet parent, ~ pour - $suffix, / pour la racine. 'cd' sans argument équivaut à 'cd ~' - - Si le dn commence par '~/', il s'agit d'un rdn relatif à $suffix. - - Si le dn commence par /, searchbase reçoit la valeur rdn sans - modifications (sauf bien sûr enlever le '/' de tête si nécessaire). Il - faut alors que ce soit un dn absolu. - ls [-b searchbase] [filter [attrs...]] - search [-b searchbase] [filter [attrs...]] - Utiliser ldapsearch pour faire la recherche, et copier le résultat dans - l'espace de travail. 'ls' est équivalent à 'search -s one'. Si ce n'est - pas déjà le cas, passer en mode 'ldif'. - L'option -b prend une valeur avec la même syntaxe que la commande cd, - sauf que les alias ne sont pas supportés. En particulier, la valeur est - relative au $searchbase courant. Pour faire une recherche par rapport à - $suffix, il faut utiliser la syntaxe ~/searchbase. - En mode append, rajouter le résultat de la recherche à l'espace de - travail, puis repasser en mode replace. - Le code de retour est 1 si aucun enregistrement n'a été trouvé, sinon - le code de retour est celui de la commande ldapsearch. - cut Couper les lignes trop longues. Cette action est en principe effectuée - automatiquement lors de la sauvegarde. Il n'est pas conseillé - d'appliquer des méthodes de transformation après avoir utilisé cette - action. - uncut - Fusionner les lignes coupées. Cette action est en principe effectuée - automatiquement lors du chargement ou après la recherche. - encode [attrs...] - Encoder en base64 les valeurs des attributs mentionnés. - decode [attrs...] - Décoder les valeurs des attributs mentionnés si nécessaire (c'est à dire - s'ils sont encodés en base64) - keepattr attrs... - Garder uniquement les lignes des attributs mentionnés. Ensuite, - supprimer les objets ayant uniquement la ligne dn: (en d'autres termes, - keepattr sans argument supprime *tout* l'espace de travail) - keepval attr patterns... - Pour l'attribut attr, garder uniquement les lignes pour lesquelles les - valeurs correspondent aux expressions régulières. Les autres attributs - ne sont pas modifiés. Ensuite, supprimer les objets ayant uniquement la - ligne dn: - exclude attrs... - Supprimer les lignes des attributs mentionnés. Ensuite, supprimer les - objets ayant uniquement la ligne dn: - excludeval attr patterns... - Pour l'attribut attr, supprimer les lignes pour lesquelles les - valeurs correspondent aux expressions régulières. Les autres attributs - ne sont pas modifiés. Ensuite, supprimer les objets ayant uniquement la - ligne dn: - keepvalentry attr patterns... - Pour l'attribut attr, vérifier si *au moins une* valeur correspond à - l'une des expressions régulières. Si c'est le cas, garder l'entrée - entière, sinon supprimer l'entrée. - excludevalentry attr patterns... - Pour l'attribut attr, vérifier si *aucune* des valeurs ne correspond à - l'une des expressions régulières. Si c'est le cas, garder l'entrée - entière, sinon supprimer l'entrée. - setval attr values... - Remplacer toutes les valeurs de l'attribut attr par les valeurs - spécifiées. - addval attr values... - Ajouter un nouvel attribut avec les valeurs spécifiées. Si l'attribut - existe déjà, les nouvelles valeurs sont ajoutées à la fin. - sed args - Modifier l'espace de travail avec le résultat de la commande sed. - note: aucun argument n'est filtré, mais il ne faut pas utiliser les - options de sed qui provoquent la modification en place du fichier, - comme par exemple l'option -i - awk args - Modifier l'espace de travail avec le résultat de la commande awk. - grep args - Modifier l'espace de travail avec le résultat de la commande grep. - format [options] attrs... - Formater l'espace de travail en données tabulaires, et passer en mode - 'plain'. - --show-headers - Afficher les en-têtes - -F FSEP - Spécifier le séparateur pour les attributs. Par défaut, il s'agit du - caractère de tabulation. - -R VSEP - Spécifier le séparateur pour les valeurs des attributs. Par défaut, il - s'agit du point-virgule ';' - -e Retourner les valeurs comme des variables shell. Les options -F et -R - sont ignorées. Les attributs multivalués sont écrits sous forme de - tableaux. Par exemple: - attributes=('mail' 'givenName') - index=0 - mail='user@domain.fr' - givenName=('peter' 'gabriel') - --bc - Dans le mode -e, spécifier une commande à insérer avant le premier - enregistrement. Quand cette commande est lancée, index==-1 - -c Dans le mode -e, spécifier une commande à insérer après chaque - enregistrement - --ec - Dans le mode -e, spécifier une commande à insérer après le dernier - enregistrement - sort [args] - Modifier l'espace de travail avec le résultat de la commande sort. - edit - Lancer un éditeur pour modifier l'espace de travail. - diff [options] - Afficher les différences entre l'espace de travail et la version - précédente - ifok cmd - iferror cmd - Si le dernier code de retour est 0 (resp. !=0), lancer la commande cmd - skip n - Sauter les n prochaines commandes. A utiliser avec ifok et iferror - undo - Annuler la dernière modification effectuée sur l'espace de travail - -Les directives suivantes prennent le contenu de l'espace de travail, et le -transforment en une suite de commandes de modifications pour ldapmodify: - - A Créer un objet de toutes pièces avec les attributs donnés et leurs - valeurs. - a Ajouter les valeurs spécifiée à l'attribut - r Remplacer les valeurs de l'attribut par celles spécifiées - d Supprimer les valeurs spécifiées de l'attribut - D Supprimer l'attribut - delentry - Supprimer l'objet - ldapmodify - Utiliser ldapmodify pour modifier les objets sur le serveur. Il faut - utiliser au préalable l'une des méthodes de transformation parmi A, a, - r, d, D, delentry. - Le code de retour est celui de la commande ldapmodify. - ldapadd - Utiliser ldapadd pour créer les objets situés dans l'espace de travail. - Le code de retour est celui de la commande ldapadd. - ldapdelete - Utiliser ldapdelete pour supprimer la liste des dns situés dans l'espace - de travail. - Le code de retour est celui de la commande ldapdelete. - -Notes: -- les expressions régulières sont celles reconnues par awk. -- pour spécifier plusieurs actions sur une même ligne, les séparer par // -- le code de retour est 0 si ok, 255 si une erreur s'est produite (erreur de - syntaxe, de connexion, de lecture/écriture de fichier, etc.). sinon, les - opérations ldap{search,modify,delete,add} ont leur code de retour respectifs -}}}-
!Liste des librairies de ulib -* [[ulib/apache]] -* [[ulib/apache.tools]] -* [[ulib/auto]] -* [[ulib/awk]] -* [[ulib/base]] -* [[ulib/base.args]] -* [[ulib/base.array]] -* [[ulib/base.bool]] -* [[ulib/base.compat]] -* [[ulib/base.core]] -* [[ulib/base.init]] -* [[ulib/base.num]] -* [[ulib/base.quote]] -* [[ulib/base.split]] -* [[ulib/base.string]] -* [[ulib/base.tools]] -* [[ulib/base.ulib]] -* [[ulib/bash]] -* [[ulib/cgi]] -* [[ulib/cgisupport]] -* [[ulib/compat]] -* [[ulib/conf]] -* [[ulib/crontab]] -* [[ulib/debian]] -* [[ulib/DEFAULTS]] -* [[ulib/install]] -* [[ulib/ipcalc]] -* [[ulib/java]] -* [[ulib/javaproperties]] -* [[ulib/json]] -* [[ulib/ldap]] -* [[ulib/ldif]] -* [[ulib/legacy]] -* [[ulib/macosx]] -* [[ulib/mkcrypt]] -* [[ulib/modeline]] -* [[ulib/network-manager-service]] -* [[ulib/password]] -* [[ulib/prefixes]] -* [[ulib/PREFIXES-DEFAULTS]] -* [[ulib/pretty]] -* [[ulib/ptools]] -* [[ulib/redhat]] -* [[ulib/runs]] -* [[ulib/runsmod]] -* [[ulib/runsmod.defaults]] -* [[ulib/semver]] -* [[ulib/service]] -* [[ulib/sysinfos]] -* [[ulib/template]] -* [[ulib/tiddlywiki]] -* [[ulib/udir]] -* [[ulib/uenv]] -* [[ulib/uenv_update]] -* [[ulib/uinc]] -* [[ulib/uinst]] -* [[ulib/ulib]] -* [[ulib/ulibsh]] -* [[ulib/vcs]] -* [[ulib/virsh]] -* [[ulib/webobjects]] -* [[ulib/woinst]] -* [[ulib/wondermonitor]] -* [[ulib/wosign]] -* [[ulib/wotaskd]]-
!! {{{compute_all_prefixes}}} -!! {{{recompute_all_prefixes}}}-
!! {{{apache_resolvecert}}} -{{{ -Calculer l'emplacement des certificats correspondant aux arguments $1 et -$2 (qui correspondent aux options --conf et --dir de apache_addcert()), -puis initialiser les variables $3(=cert), $4(=key) et $5(=ca) -}}} -!! {{{apache_addcert}}} -!! {{{apache_autoconf}}} -!! {{{apache_autoconf_localhosts}}}-
!! {{{get_default_apachebin_prefix}}} -!! {{{get_default_apacheversion_prefix}}} -!! {{{get_default_apachectl_prefix}}} -!! {{{get_default_apachelogdir_prefix}}} -!! {{{get_default_apachesslcertsdir_prefix}}} -!! {{{get_default_apachesslkeysdir_prefix}}} -!! {{{get_default_apacheconfdir_prefix}}} -!! {{{get_default_apacheconf_prefix}}} -!! {{{get_default_apacheavsitesdir_prefix}}} -!! {{{get_default_apachesitesdir_prefix}}} -!! {{{get_default_htdocsdir_prefix}}} -!! {{{get_default_cgibindir_prefix}}} -!! {{{compute_apache_prefixes}}} -!! {{{recompute_apache_prefixes}}} -!! {{{get_APACHEBIN_prefix}}} -!! {{{get_APACHEVERSION_prefix}}} -!! {{{get_APACHECTL_prefix}}} -!! {{{get_APACHELOGDIR_prefix}}} -!! {{{get_APACHESSLCERTSDIR_prefix}}} -!! {{{get_APACHESSLKEYSDIR_prefix}}} -!! {{{get_APACHECONFDIR_prefix}}} -!! {{{get_APACHECONF_prefix}}} -!! {{{get_APACHEAVSITESDIR_prefix}}} -!! {{{get_APACHESITESDIR_prefix}}} -!! {{{get_HTDOCSDIR_prefix}}} -!! {{{get_CGIBINDIR_prefix}}}-
!! {{{parseheaders}}} -!! {{{printheaders}}} -!! {{{resetheaders}}} -!! {{{copyall}}} -!! {{{lawkcsv}}} -!! {{{cawkcsv}}} -!! {{{awkcsv}}} -!! {{{lgrepcsv}}} -!! {{{cgrepcsv}}} -!! {{{grepcsv}}} -!! {{{lawkfsv2csv}}} -!! {{{cawkfsv2csv}}} -!! {{{awkfsv2csv}}} -!! {{{lmergecsv}}} -{{{ -Fusionner sur la sortie standard les deux fichiers csv $1 et $2. La clé du -fichier $1 est spécifiée par l'option --lkey et vaut 1 par défaut. La clé -du fichier $2 est spécifiée par l'option --rkey et vaut 1 par défaut. Les -valeurs des clés ne doivent pas faire plus de 64 caractères de long. -}}} -!! {{{readleft}}} -!! {{{readright}}} -!! {{{right2left}}} -!! {{{cmergecsv}}} -!! {{{mergecsv}}} -!! {{{lsortcsv}}} -{{{ -Trier le fichier csv $1. La clé du tri est spécifiée par l'option -k et -vaut 1 par défaut. Les valeurs des clés ne doivent pas faire plus de 64 -caractères de long. -}}} -!! {{{csortcsv}}} -!! {{{sortcsv}}} -!! {{{ldumpcsv}}} -!! {{{cdumpcsv}}} -!! {{{dumpcsv}}} -!! {{{lprintcsv}}} -!! {{{cprintcsv}}} -!! {{{printcsv}}}-
!! {{{parse_opts}}} -{{{ -Analyser des arguments. Cette fonction doit être appelée avec une description -des options à analyser, suivie des arguments proprement dits. En fonction des -options rencontrées, certaines variables sont mises à jour. -Les arguments de cette fonction sont donc de la forme 'optdescs -- args' -}}} -!! {{{parse_args_check}}} -{{{ -Simplifier l'utilisation de parse_opts(). En entrée, le tableau args doit être -initialisé avec la liste des options. En sortie, ce tableau contient la liste -des arguments restant sur la ligne de commande. En cas d'erreur, retourner 1. -Exemple d'utilisation: -args=(...) -parse_args_check "$@" || return; set -- "${args[@]}" -}}} -!! {{{parse_args}}} -{{{ -Simplifier l'utilisation de parse_opts(). En entrée, le tableau args doit être -initialisé avec la liste des options. En sortie, ce tableau contient la liste -des arguments restant sur la ligne de commande. En cas d'erreur, quitter le -script avec die() -Exemple d'utilisation: -args=(...) -parse_args_check "$@"; set -- "${args[@]}" -}}} -!! {{{genparse}}} -{{{ -Afficher une ligne de commande à évaluer pour simplifier l'utilisation de -parse_opts(). Une fonction display_help() par défaut est définie et les -options appropriées de parse_opts sont utilisées pour reconnaître les options -spécifiées par les arguments. -Cette fonction peut être utilisée de cette manière: -HELP_DESC=... -HELP_ARG_DESC=... # pour chaque arg -eval "$(genparse [args...])" -D'autres variables peuvent être définies: HELP_USAGE, HELP_OPTIONS, -HELP_ARG_OPTION. Consulter le source pour connaitre leur utilisation -Les arguments de cette fonction sont de la forme 'sansarg' pour une option -simple qui ne prend pas d'argument ou 'avecarg=[default-value]' pour une -option qui prend un argument. Les options générées sont des options -longues. En l'occurence, les options générées sont respectivement '--sansarg' -et '--avecarg:' -Les variables et les options sont toujours en minuscule. Pour les variables, -le caractère '-' est remplacé par '_'. Si une option contient une lettre en -majuscule, l'option courte correspondante à cette lettre sera aussi reconnue. -Par exemple, la commande suivante: -genparse Force enCoding=utf-8 input= long-Option= -affichera ceci: -function display_help() { -[ -n "$HELP_USAGE" ] || HELP_USAGE="USAGE -$scriptname [options]" -[ -n "$HELP_OPTIONS" ] || HELP_OPTIONS="OPTIONS -${HELP_FORCE_OPTION:- -f, --force${HELP_FORCE_DESC:+ -$HELP_FORCE_DESC}} -}}}-
!! {{{is_yes}}} -{{{ -retourner vrai si $1 est une valeur "oui" -}}} -!! {{{is_no}}} -{{{ -retourner vrai si $1 est une valeur "non" -}}} -!! {{{yesval}}} -{{{ -normaliser une valeur vraie: si $1 est une valeur "oui", afficher 1, sinon -afficher une chaine vide -}}} -!! {{{setb}}} -{{{ -Lancer la commande $2..@ en supprimant la sortie standard. Si la commande -retourne vrai, assigner la valeur 1 à la variable $1. Sinon, lui assigner la -valeur "" -note: en principe, la syntaxe est 'setb var cmd args...'. cependant, la -syntaxe 'setb var=cmd args...' est supportée aussi -}}} -!! {{{evalb}}} -{{{ -Lancer la commande $@ avec evalx() en supprimant la sortie standard. Si la -commande retourne vrai, afficher 1. Sinon, afficher "" -}}} -!! {{{setxb}}} -{{{ -équivalent à setx $1 evalb $2..@ -}}}-
!! {{{setx2}}} -!! {{{rawecho}}} -!! {{{rawecho_}}} -!! {{{quote_arg}}} -!! {{{quoted_arg}}} -!! {{{quoted_args}}} -!! {{{set_var}}} -!! {{{set_var_cmd}}} -!! {{{set_var_literal}}} -!! {{{quote_awk}}} -!! {{{quoted_awk}}} -!! {{{quote_seds}}} -!! {{{quote_form}}} -!! {{{quoted_form}}}-
!! {{{echo_}}} -{{{ -afficher la valeur $* sans passer à la ligne -}}} -!! {{{recho}}} -{{{ -afficher une valeur brute. contrairement à la commande echo, ne reconnaitre -aucune option (i.e. -e, -E, -n ne sont pas signifiants) -}}} -!! {{{recho_}}} -{{{ -afficher une valeur brute, sans passer à la ligne. contrairement à la commande -echo, ne reconnaitre aucune option (i.e. -e, -E, -n ne sont pas signifiants) -}}} -!! {{{should_quote}}} -{{{ -Tester si la chaine $* doit être mise entre quotes -}}} -!! {{{qval}}} -{{{ -Afficher la chaine $* quotée avec " -}}} -!! {{{qvalm}}} -{{{ -Afficher la chaine $* quotée si nécessaire avec " -}}} -!! {{{qvalr}}} -{{{ -Afficher la chaine $* quotée si nécessaire avec ", sauf si elle est vide -}}} -!! {{{qvals}}} -{{{ -Afficher chaque argument de cette fonction quotée le cas échéant avec " -Chaque valeur est séparée par un espace. -}}} -!! {{{qwc}}} -{{{ -Dans la chaine $*, remplacer \ par \\, " par \", $ par \$, ` par \`, puis -quoter la chaine avec ", sauf les wildcards * et ? -Cela permet de quoter une chaine permettant de glober des fichiers, e.g -eval "ls $(qwc "$value")" -Note: la protection de ! n'est pas effectuée, parce que le comportement du -shell est incohérent entre le shell interactif et les scripts. Pour une -version plus robuste, il est nécessaire d'utiliser un programme externe tel -que sed ou awk -}}} -!! {{{qlines}}} -{{{ -Traiter chaque ligne de l'entrée standard pour en faire des chaines quotées -avec ' -}}} -!! {{{setv}}} -{{{ -initialiser la variable $1 avec la valeur $2* -note: en principe, la syntaxe est 'setv var values...'. cependant, la -syntaxe 'setv var=values...' est supportée aussi -}}} -!! {{{echo_setv}}} -{{{ -Afficher la commande qui serait lancée par setv "$@" -}}} -!! {{{setx}}} -{{{ -syntaxe 1: setx var cmd -initialiser la variable $1 avec le résultat de la commande "$2..@" -note: en principe, la syntaxe est 'setx var cmd args...'. cependant, la -syntaxe 'setx var=cmd args...' est supportée aussi -syntaxe 2: setx -a array cmd -initialiser le tableau $1 avec le résultat de la commande "$2..@", chaque -ligne du résultat étant un élément du tableau -note: en principe, la syntaxe est 'setx -a array cmd args...'. cependant, la -syntaxe 'setx -a array=cmd args...' est supportée aussi -}}} -!! {{{evalx}}} -{{{ -Implémenter une syntaxe lisible et naturelle permettant d'enchainer des -traitements sur une valeur. Par exemple, la commande -evalx cmd1... // cmd2... // cmd3... -affiche le résultat de la commande "$(cmd3 $(cmd2 $(cmd1)))" -Retourner le dernier code d'erreur non nul, ou 0 si toutes les commandes se -sont exécutées sans erreur. -}}} -!! {{{setxx}}} -{{{ -équivalent à setx $1 evalx $2..@ -}}} -!! {{{evalp}}} -{{{ -Implémenter une syntaxe alternative permettant d'enchainer des traitements sur -un flux de données. Par exemple, la commande -evalp cmd1... // cmd2... // cmd3... -affiche le résultat de la commande "$(cmd1 | cmd2 | cmd3)" -Typiquement, cette fonction permet de faciliter la construction d'un -enchainement de commandes par programme, ou de faciliter l'utilisation de la -fonction setx() pour récupérer le résultat d'un enchainement. Dans les autres -cas, il est plus simple et naturel d'écrire les enchainements avec la syntaxe -de bash. -}}} -!! {{{setxp}}} -{{{ -équivalent à setx $1 evalp $2..@ -}}} -!! {{{testx}}} -{{{ -Faire un test unaire avec la commande [ sur une valeur calculée avec evalx. -Utiliser la syntaxe 'testx op cmds...' e.g. -testx -z cmd1 // cmd2 -}}} -!! {{{test2x}}} -{{{ -Faire une test binaire avec la commande [ entre une valeur spécifiée et une -valeur calculée avec evalx. Utiliser la syntaxe 'test2x value op cmds...' e.g. -test2x value == cmd1 // cmd2 -}}} -!! {{{testrx}}} -{{{ -Faire une test binaire avec la commande [[ entre une valeur spécifiée et une -valeur calculée avec evalx. Utiliser la syntaxe 'testrx value op cmds...' e.g. -testrx value == cmd1 // cmd2 -}}} -!! {{{testp}}} -{{{ -Faire un test unaire avec la commande [ sur une valeur calculée avec evalp. -Utiliser la syntaxe 'testp op cmds...' e.g. -testp -z cmd1 // cmd2 -}}} -!! {{{test2p}}} -{{{ -Faire une test binaire avec la commande [ entre une valeur spécifiée et une -valeur calculée avec evalp. Utiliser la syntaxe 'test2p value op cmds...' e.g. -test2p value == cmd1 // cmd2 -}}} -!! {{{testrp}}} -{{{ -Faire une test binaire avec la commande [[ entre une valeur spécifiée et une -valeur calculée avec evalp. Utiliser la syntaxe 'testrp value op cmds...' e.g. -testrp value == cmd1 // cmd2 -}}} -!! {{{err2out}}} -{{{ -lancer la commande $@ en redirigeant la sortie d'erreur sur la sortie standard -}}}-
!! {{{isnum}}} -{{{ -retourner vrai si $1 est une valeur numérique entière (positive ou négative) -}}} -!! {{{ispnum}}} -{{{ -retourner vrai si $1 est une valeur numérique entière positive -}}} -!! {{{isrnum}}} -{{{ -retourner vrai si $1 est une valeur numérique réelle (positive ou négative) -le séparateur décimal peut être . ou , -}}}-
!! {{{qawk}}} -{{{ -Dans la chaine $*, remplacer \ par \\ et " par \" et afficher la chaine -entourée de guillemets. Ceci est utile pour quoter des valeur à insérer dans -un script awk -}}} -!! {{{qseds}}} -{{{ -Quoter la chaine $*, qui doit être utilisée comme chaine de recherche ou de -remplacement de grep, sed ou awk -}}} -!! {{{qform}}} -{{{ -Dans la chaine $* qui est de la forme "name=value", remplacer dans name et -dans value '%' par '%25', '+' par '%2B', '&' par '%26', '=' par '%3D', ' ' par -'+' -}}}-
!! {{{splitfsep}}} -{{{ -Découper $1 de la forme "first[SEPsecond]" entre first, qui est placé dans la -variable $3(=first) et second, qui est placée dans la variable $4(=second). $2 -est la valeur SEP. Le découpage est faite sur la *première* occurence de SEP. -}}} -!! {{{splitfsep2}}} -{{{ -Découper $1 de la forme "[firstSEP]second" entre first, qui est placé dans la -variable $3(=first) et second, qui est placée dans la variable $4(=second). $2 -est la valeur SEP. Le découpage est faite sur la *première* occurence de SEP. -}}} -!! {{{splitlsep}}} -{{{ -Découper $1 de la forme "first[SEPsecond]" entre first, qui est placé dans la -variable $3(=first) et second, qui est placée dans la variable $4(=second). $2 -est la valeur SEP. Le découpage est faite sur la *dernière* occurence de SEP. -}}} -!! {{{splitlsep2}}} -{{{ -Découper $1 de la forme "[firstSEP]second" entre first, qui est placé dans la -variable $3(=first) et second, qui est placée dans la variable $4(=second). $2 -est la valeur SEP. Le découpage est faite sur la *dernière* occurence de SEP. -}}} -!! {{{splitvar}}} -{{{ -Découper $1 de la forme name[=value] entre le nom, qui est placé dans la -variable $2(=name) et la valeur, qui est placée dans la variable $3(=value) -}}} -!! {{{splitpath}}} -{{{ -Découper $1 de la forme [dir/]name entre le répertoire, qui est placé dans la -variable $2(=dir), et le nom du fichier, qui est placé dans la variable -$3(=name) -}}} -!! {{{splitname}}} -{{{ -Découper $1 de la forme basename[.ext] entre le nom de base du fichier, qui -est placé dans la variable $2(=basename) et l'extension, qui est placée dans -la variable $3(=ext) -Attention, si $1 est un chemin, le résultat risque d'être faussé. Par exemple, -'splitname a.b/c' ne donne pas le résultat escompté. -}}} -!! {{{splithost}}} -{{{ -Découper $1 de la forme hostname[.domain] entre le nom d'hôte, qui est placé -dans la variable $2(=hostname) et le domaine, qui est placée dans la variable -$3(=domain) -}}} -!! {{{splituserhost}}} -{{{ -Découper $1 de la forme [user@]host entre le nom de l'utilisateur, qui est placé -dans la variable $2(=user) et le nom d'hôte, qui est placée dans la variable -$3(=host) -}}} -!! {{{splitpair}}} -{{{ -Découper $1 de la forme first[:second] entre la première valeur, qui est placé -dans la variable $2(=src) et la deuxième valeur, qui est placée dans la variable -$3(=dest) -}}} -!! {{{splitproxy}}} -{{{ -Découper $1 de la forme http://[user:password@]host[:port]/ entre les valeurs -$2(=host), $3(=port), $4(=user), $5(=password) -}}} -!! {{{spliturl}}} -{{{ -Découper $1 de la forme scheme://[user:password@]host[:port]/path entre les -valeurs $2(=scheme), $3(=user), $4(=password), $5(=host), $6(=port), $7(=path) -}}}-
!! {{{straddp}}} -{{{ -ajouter le préfixe $1 à $2* -}}} -!! {{{strdelp}}} -{{{ -enlever le préfixe $1 à $2* -}}} -!! {{{strdelp2}}} -{{{ -enlever le préfixe $1 le plus long à $2* -}}} -!! {{{stradds}}} -{{{ -ajouter le suffixe $1 à $2* -}}} -!! {{{strdels}}} -{{{ -enlever le suffixe $1 à $2* -}}} -!! {{{strdels2}}} -{{{ -enlever le suffixe le plus long $1 à $2* -}}} -!! {{{strlower}}} -{{{ -afficher en minuscule la valeur $* -}}} -!! {{{strlower1}}} -{{{ -afficher la valeur $* après avoir converti la première lettre en minuscule -}}} -!! {{{strlowers}}} -{{{ -afficher les valeurs $1..* après avoir converti leur première lettre en -minuscule -}}} -!! {{{strupper}}} -{{{ -afficher en majuscule la valeur $* -}}} -!! {{{strupper1}}} -{{{ -afficher la valeur $* après avoir converti la première lettre en majuscule -}}} -!! {{{struppers}}} -{{{ -afficher les valeurs $1..* après avoir converti leur première lettre en -majuscule -}}} -!! {{{strmid}}} -{{{ -Afficher la plage $1 de la valeur $2*. La plage peut être d'une des formes -'start', '[start]:length'. Si start est négatif, le compte est effectué à -partir de la fin de la chaine. Si length est négatif, il est rajouté à la -longueur de la chaine à partir de start -}}} -!! {{{strrepl}}} -{{{ -Remplacer dans la valeur $3* le motif $1 par la chaine $2. $1 peut commencer -par l'un des caractères /, #, % pour indiquer le type de recherche -}}} -!! {{{first_char}}} -{{{ -retourner le premier caractère de la chaine $* -}}} -!! {{{last_char}}} -{{{ -retourner le dernier caractère de la chaine $* -}}} -!! {{{first_chars}}} -{{{ -retourner tous les caractères de la chaine $*, excepté le dernier -}}} -!! {{{last_chars}}} -{{{ -retourner tous les caractères de la chaine $*, excepté le premier -}}} -!! {{{first_char_is}}} -{{{ -Tester si le premier caractère de la chaine $1 est $2 -}}} -!! {{{last_char_is}}} -{{{ -Tester si le dernier caractère de la chaine $1 est $2 -}}} -!! {{{beginswith}}} -{{{ -Tester si la chaine $1 commence par le wildcard $2 -}}} -!! {{{endswith}}} -{{{ -Tester si la chaine $1 se termine par le wildcard $2 -}}}-
!! {{{base_umove}}} -{{{ -Outil de haut niveau pour déplacer un fichier ou un lien. Si c'est un lien qui -est déplacé, la destination du lien est mise à jour si elle est relative. -l'option '-d UPDATEDIR' permet de spécifier un répertoire dans lequel tous les -liens qui pointent vers le fichier déplacé sont mis à jour si le déplacement -du fichier se fait avec succès. -}}} -!! {{{base_udelete}}} -{{{ -Outil de haut niveau pour supprimer un fichier ou un lien. Si on doit -supprimer un fichier, et que l'option '-d UPDATEDIR' est spécifiée, et que des -liens du répertoire UPDATEDIR pointent vers le fichier supprimé, ces liens -sont supprimés aussi. -}}} -!! {{{base_ucopy}}} -{{{ -Outil de haut niveau pour copier un fichier ou un lien. Si c'est un lien qui -est copié, la destination du lien est mise à jour si elle est relative. -}}}-
!! {{{setyesval}}} -{{{ -mettre la valeur normalisée de la valeur "oui" de $2 dans la variable $1 -}}} -!! {{{normyesval}}} -{{{ -remplacer la valeur de la variable $1 par la valeur normalisée de sa valeur "oui" -Si $2 est non vide, prendre cette valeur plutôt que la valeur de la variable $1 -}}} -!! {{{normyesvals}}} -{{{ -remplacer les valeur des variables $1..* par les valeurs normalisées -respectives de leur valeur "oui" -}}} -!! {{{quote_in}}} -{{{ -Comme quote_arg pour une chaine lue sur stdin -}}} -!! {{{quote_sin}}} -{{{ -Pour la chaine lue sur stdin, remplacer ' par '\''. Cela permet de protéger une -chaine à mettre entre quotes -}}} -!! {{{quote_sarg}}} -{{{ -Dans la chaine $1, remplacer ' par '\''. Cette fonction utilise quote_sin, -puisque le shell a des difficultés à faire le rechercher/remplacer approprié -}}} -!! {{{quoted_sarg}}} -{{{ -Dans la chaine $1, remplacer ' par '\'', et afficher la chaine entourée de -quotes -}}} -!! {{{quoted_sargs}}} -{{{ -Comme quoted_sarg, mais tous les arguments sont quotés et affichés entourés de -quotes, ce qui permet de construire des arguments d'une ligne de commande -}}} -!! {{{set_array_cmd}}} -{{{ -Afficher la commande permettant d'initialiser le tableau $1 avec les valeurs: -soit du tableau $2, soit de $3..$n si $2=="@" -S'il n'y a que l'argument $1, alors afficher la commande permettant de -recréer le tableau $1 -}}} -!! {{{set_array}}} -{{{ -Soit $1 un tableau à créer. Si $2=="@", créer le tableau $1 avec les valeurs -$3..$n. Sinon, créer le tableau $1 avec les valeurs du tableau $2. -Cette fonction n'existe que comme un pendant de set_var(), mais le véritable -intérêt est la fonction set_array_cmd(). cf array_copy() pour une version plus -efficace de la copie de tableaux -}}} -!! {{{array_count}}} -{{{ -retourner le nombre d'éléments du tableau $1 -}}} -!! {{{array_isempty}}} -{{{ -tester si le tableau $1 est vide -}}} -!! {{{array_new}}} -{{{ -créer un tableau vide dont le nom est $1 -}}} -!! {{{array_add}}} -{{{ -ajouter les valeurs $2..@ au tableau dont le nom est $1 -}}} -!! {{{array_ins}}} -{{{ -insérer les valeurs $2..@ au début du tableau dont le nom est $1 -}}} -!! {{{array_del}}} -{{{ -supprimer *les* valeurs $2 du tableau dont le nom est $1 -}}} -!! {{{array_addu}}} -{{{ -ajouter la valeur $2 au tableau dont le nom est $1, si la valeur n'y est pas -déjà. Retourner vrai si la valeur a été ajoutée -}}} -!! {{{array_set}}} -!! {{{array_insu}}} -{{{ -insérer la valeur $2 au début du tableau tableau dont le nom est $1, si la -valeur n'y est pas déjà. Retourner vrai si la valeur a été ajoutée. -}}} -!! {{{array_fillrange}}} -{{{ -Initialiser le tableau $1 avec les nombres de $2(=1) à $3(=10) avec un step de $4(=1) -}}} -!! {{{array_eq}}} -{{{ -tester l'égalité des tableaux $1 et $2 -}}} -!! {{{array_contains}}} -{{{ -tester si le tableau dont le nom est $1 contient la valeur $2 -}}} -!! {{{array_icontains}}} -{{{ -tester si le tableau dont le nom est $1 contient la valeur $2, sans tenir -compte de la casse -}}} -!! {{{array_find}}} -{{{ -si le tableau $1 contient la valeur $2, retourner l'index de la valeur. Si le -tableau $3 est spécifié, retourner la valeur à l'index dans ce tableau -}}} -!! {{{array_reverse}}} -{{{ -Inverser l'ordre des élément du tableau $1 -}}} -!! {{{array_replace}}} -{{{ -dans le tableau $1, remplacer toutes les occurences de $2 par $3..* -}}} -!! {{{array_each}}} -{{{ -Pour chacune des valeurs 'v' du tableau $1, appeler la fonction $2 avec les -arguments '$v $3..$n' -}}} -!! {{{array_map}}} -{{{ -Pour chacune des valeurs 'v' du tableau $1, appeler la fonction $2 avec les -arguments '$v $3..$n', et remplacer la valeur par le résultat de la fonction -}}} -!! {{{first_value}}} -{{{ -retourner la première valeur du tableau $1 -}}} -!! {{{last_value}}} -{{{ -retourner la dernière valeur du tableau $1 -}}} -!! {{{array_copy}}} -{{{ -copier le contenu du tableau $2 dans le tableau $1 -}}} -!! {{{array_copy_firsts}}} -{{{ -copier tous les valeurs du tableau $2(=$1) dans le tableau $1, excepté la dernière -}}} -!! {{{array_del_last}}} -!! {{{array_copy_lasts}}} -{{{ -copier tous les valeurs du tableau $2(=$1) dans le tableau $1, excepté la première -}}} -!! {{{array_del_first}}} -!! {{{array_extend}}} -{{{ -ajouter le contenu du tableau $2 au tableau $1 -}}} -!! {{{array_extendu}}} -{{{ -ajouter chacune des valeurs du tableau $2 au tableau $1, si ces valeurs n'y -sont pas déjà. Retourner vrai si au moins une valeur a été ajoutée -}}} -!! {{{array_extend_firsts}}} -{{{ -ajouter toutes les valeurs du tableau $2 dans le tableau $1, excepté la dernière -}}} -!! {{{array_extend_lasts}}} -{{{ -ajouter toutes les valeurs du tableau $2 dans le tableau $1, excepté la première -}}} -!! {{{array_xsplit}}} -{{{ -créer le tableau $1 avec chaque élément de $2 (un ensemble d'éléments séparés -par $3, qui vaut ':' par défaut). -}}} -!! {{{array_split}}} -{{{ -créer le tableau $1 avec chaque élément de $2 (un ensemble d'éléments séparés -par $3, qui vaut ':' par défaut). Les éléments vides sont ignorés. par exemple -"a::b" est équivalent à "a:b" -}}} -!! {{{array_from_path}}} -!! {{{array_from_xlines}}} -{{{ -créer le tableau $1 avec chaque ligne de $2. -}}} -!! {{{array_from_lines}}} -{{{ -créer le tableau $1 avec chaque ligne de $2. Les lignes vides sont ignorés. -}}} -!! {{{array_join}}} -{{{ -afficher le contenu du tableau dont le nom est $1 sous forme d'une liste de -valeurs séparées par $2 (par défaut, une virgule) -Si $1=="@", alors les éléments du tableaux sont les arguments de la fonction à -partir de $3 -Si $1!="@" et que le tableau est vide, afficher $3 -Si $1!="@", $4 et $5 sont des préfixes et suffixes à rajouter à chaque élément -}}} -!! {{{array_mapjoin}}} -{{{ -map le tableau $1 avec la fonction $2, puis afficher le résultat en séparant -chaque élément par $3. Les arguments et la sémantique sont les mêmes que pour -array_join en tenant compte de l'argument supplémentaire $2 qui est la -fonction pour array_map (les autres arguments sont décalés en conséquence) -}}} -!! {{{array_to_lines}}} -{{{ -afficher le tableau dont le nom est $1 sous forme de lignes -}}} -!! {{{array_to_path}}} -{{{ -afficher le tableau dont le nom est $1 sous forme d'une liste de chemins -séparés par ':') -}}} -!! {{{array_fix_paths}}} -{{{ -Corriger les valeurs du tableau $1. Les valeurs contenant le séparateur -$2(=':') sont séparées en plusieurs valeurs. Par exemple avec le tableau -input=(a b:c), le résultat est input=(a b c) -}}} -!! {{{get_date_rfc822}}} -!! {{{get_date_fr}}} -!! {{{get_time_fr}}} -!! {{{parse_date}}} -!! {{{udelpath}}} -{{{ -supprimer le chemin $1 de $2(=PATH) -}}} -!! {{{uaddpath}}} -{{{ -Ajouter le chemin $1 à la fin, dans $2(=PATH), s'il n'y existe pas déjà -}}} -!! {{{uinspathm}}} -{{{ -Ajouter le chemin $1 au début, dans $2(=PATH), s'il n'y existe pas déjà -}}} -!! {{{uinspath}}} -{{{ -S'assurer que le chemin $1 soit au début de $2(=PATH) -}}} -!! {{{withpath}}} -{{{ -tester si le chemin est relatif à . ou à .., ou est absolu. i.e 'withpath a/b' -renvoie faux alors que 'withpath ./a/b' renvoie vrai -}}} -!! {{{withext}}} -{{{ -tester si le fichier a une extension -}}} -!! {{{normpath}}} -{{{ -normaliser le chemin $1, qui est soit absolu, soit relatif à $2 (qui vaut -$(pwd) par défaut) -}}} -!! {{{abspath}}} -{{{ -Retourner un chemin absolu vers $1. Si $2 est non nul et si $1 est un chemin -relatif, alors $1 est exprimé par rapport à $2, sinon il est exprimé par -rapport au répertoire courant. -Si le chemin n'existe pas, il n'est PAS normalisé. Sinon, les meilleurs -efforts sont faits pour normaliser le chemin. -}}} -!! {{{parentdirs}}} -{{{ -Obtenir la liste de tous les parents du répertoire $2 dans le tableau $1, du -répertoire $2 vers la racine. Si $3 commence par 'r' (comme reverse), l'ordre -est inversé: le tableau contient les répertoire de la racine vers $2. -}}} -!! {{{ppath}}} -{{{ -Dans un chemin *absolu*, remplacer "$HOME" par "~" et "$(pwd)/" par "", afin -que le chemin soit plus facile à lire. Le répertoire courant est spécifié par -$2 ou $(pwd) si $2 est vide -}}} -!! {{{relpath}}} -{{{ -Afficher le chemin relatif de $1 par rapport à $2. Si $2 n'est pas spécifié, -on prend le répertoire courant. Si $1 ou $2 ne sont pas des chemins absolus, -il sont transformés en chemins absolus par rapport à $3. Si $1==$2, retourner -une chaine vide -}}} -!! {{{relpathx}}} -{{{ -Comme relpath, mais pour un chemin vers un exécutable qu'il faut lancer: -s'assurer qu'il y a une spécification de chemin, e.g. ./script -}}} -!! {{{withinpath}}} -{{{ -Tester si le chemin absolu $2 se trouve dans le chemin absolu "$1" (appelée -barrière). Soit un chemin P, on considère que P est dans P. Si ce comportement -n'est pas souhaité, $3(=N) doit valoir O, auquel cas P est dans Q implique que -P != Q. -}}} -!! {{{safe_abspath}}} -{{{ -Afficher le chemin absolu de $1, par rapport à $2, si et seulement si le -chemin résultat ne se trouve pas en dehors de la barrière $3. Si $2 n'est pas -spécifié, prendre le répertoire courant. S'il est relatif, l'exprimer par -rapport au répertoire courant. Si $3 est relatif, l'exprimer par rapport à $2. -Si le chemin résultat est sité en dehors de la barrière, ne rien afficher et -retourner un code d'erreur. -Si le chemin $1 n'existe pas, il n'est PAS normalisé. Sinon, les meilleurs -efforts sont faits pour normaliser le chemin résultat. -}}} -!! {{{safe_relpath}}} -{{{ -Afficher le chemin relatif de $1 par rapport à $2 si et seulement si le chemin -résultat ne se trouve pas en dehors de la barrière $3. Si $2 n'est pas -spécifié, prendre le répertoire courant. S'il est relatif, l'exprimer par -rapport au répertoire courant. Si $3 est relatif, l'exprimer par rapport à $2. -Si le chemin résultat est sité en dehors de la barrière, ne rien afficher et -retourner un code d'erreur. -}}} -!! {{{splitwcs}}} -{{{ -Découper un nom de chemin $1 entre la partie sans wildcards, qui est placée dans -la variables $2(=basedir), et la partie avec wildcards, qui est placée dans la -variable $3(=filespec) -}}} -!! {{{deref}}} -{{{ -Retourner un chemin absolu vers le fichier $1, dans lequel toutes les -composantes "lien symbolique" ont été supprimées. -DEPRECATED: Cette fonction est dépréciée. Utiliser à la place readlinkm() -}}} -!! {{{readlinka}}} -{{{ -Afficher un chemin absolu vers la destination du fichier $1. Si $1 n'est pas -un lien, afficher simplement le chemin du fichier -}}} -!! {{{readlinkm}}} -{{{ -Retourner un chemin absolu vers le fichier $1, dans lequel toutes les -composantes "lien symbolique" ont été supprimées. Il n'est pas requis que les -composantes du chemin existent. -}}} -!! {{{path_if_test}}} -{{{ -afficher un chemin si le fichier $2 existe (en utilisant l'opérateur $1) dans -l'un des chemins absolus $4..n. si $3==relative, afficher le chemin relatif, -sinon le chemin absolu. note: $3 peut être de la forme relative:path, auquel -cas le chemin affiché est exprimé relativement à path -}}} -!! {{{update_link}}} -{{{ -mettre à jour le lien $2 pour qu'il pointe vers le fichier $1 -}}} -!! {{{update_links}}} -{{{ -Mettre à jour les liens $2..@ pour qu'ils pointent vers la nouvelle -destination $1 -}}} -!! {{{move_link}}} -{{{ -Déplacer le lien $1 vers $2, et mettre à jour la destination du lien si -elle est exprimée de façon relative -Si $1 n'est pas un lien, le déplacer normalement avec mv -}}} -!! {{{copy_link}}} -{{{ -Copier le lien $1 vers $2, et mettre à jour la destination du lien si -elle est exprimée de façon relative -Si $1 n'est pas un lien, le copier normalement avec cp -}}} -!! {{{array_find_links}}} -{{{ -Chercher dans le répertoire $3 (qui est par défaut le répertoire courant) -les liens vers le fichier $2, et ajouter leurs chemins absolus dans le -tableau $1 -}}} -!! {{{list_links}}} -{{{ -Chercher dans le répertoire $2 les liens vers le fichier $1, et les -afficher, un par ligne. -}}} -!! {{{move_file}}} -{{{ -Déplacer le fichier $1 vers $2, et mettre à jour les liens $3..@ pour -qu'ils pointent vers la nouvelle destination -}}} -!! {{{get_nblines}}} -{{{ -Afficher le nombre de lignes d'un fichier -}}} -!! {{{mktempf}}} -{{{ -générer un fichier temporaire et retourner son nom -}}} -!! {{{mktempd}}} -{{{ -générer un répertoire temporaire et retourner son nom -}}} -!! {{{mkdirof}}} -{{{ -Créer le répertoire correspondant à un fichier -}}} -!! {{{cp_a}}} -{{{ -copier des fichiers en gardant le maximum de propriétés -}}} -!! {{{cp_R}}} -{{{ -copier des fichiers récursivement, en suivant les liens symboliques -}}} -!! {{{quietgrep}}} -{{{ -tester la présence d'un pattern dans un fichier -}}} -!! {{{quietdiff}}} -{{{ -tester si deux fichiers sont identiques -}}} -!! {{{testsame}}} -{{{ -tester si deux fichiers sont identiques/différents -}}} -!! {{{testdiff}}} -!! {{{testupdated}}} -{{{ -test si $2 n'existe pas ou si $1 est différent de $2 -}}} -!! {{{testnewer}}} -{{{ -test si $2 n'existe pas ou si $1 est plus récent que $2 -}}} -!! {{{ps_all}}} -{{{ -afficher tous les processus avec le maximum d'informations -}}} -!! {{{progexists}}} -{{{ -tester l'existence d'un programme dans le PATH -}}} -!! {{{has_python}}} -{{{ -tester la présence de python -}}} -!! {{{has_gawk}}} -{{{ -tester la présence de gnuawk -}}} -!! {{{is_root}}} -{{{ -tester si on est root -}}} -!! {{{source_ifexists}}} -{{{ -sourcer un fichier s'il existe -}}} -!! {{{is_running}}} -{{{ -tester si un programme dont on donne le PID tourne -}}} -!! {{{sedi}}} -{{{ -Lancer sed sur un fichier en le modifiant en place -}}} -!! {{{csort}}} -{{{ -Lancer sort avec LANG=C pour éviter les problèmes avec la locale. en effet, -avec LANG!=C, sort utilise les règles de la locale pour le tri, et par -exemple, avec LANG=fr_FR.UTF-8, la locale indique que les ponctuations doivent -être ignorées. -}}} -!! {{{lsort}}} -!! {{{cgrep}}} -{{{ -Lancer grep avec LANG=C pour éviter les problèmes avec la locale. cf csort -pour une explication. -}}} -!! {{{lgrep}}} -!! {{{csed}}} -{{{ -Lancer sed avec LANG=C pour éviter les problèmes avec la locale. cf csort pour -une explication. -}}} -!! {{{lsed}}} -!! {{{cawk}}} -{{{ -Lancer awk avec LANG=C pour éviter les problèmes avec la locale. cf csort pour -une explication. -}}} -!! {{{lawk}}} -!! {{{cdiff}}} -{{{ -Lancer diff avec LANG=C pour éviter les problèmes avec la locale. cf csort -pour une explication. -}}} -!! {{{ldiff}}} -!! {{{fix_mode}}} -{{{ -Si le fichier $1 n'est pas writable, le rendre writable temporairement. Si -nécessaire, le fichier est créé. -Cette fonction s'utilise de cette façon: -mode="$(fix_mode file)" -... -unfix_mode file "$mode" -}}} -!! {{{unfix_mode}}} -{{{ -Restaurer le mode $2 du fichier $1 traité par fix_mode -}}} -!! {{{get_mode}}} -{{{ -Obtenir le mode du fichier $1, en le créant si nécessaire. A utiliser avec -unfix_mode pour restaurer le mode d'un fichier qui a été traité avec un -fichier temporaire intermédiaire -}}} -!! {{{rm_maybe}}} -{{{ -Supprimer les fichiers dont on donne la liste. Si aucun fichier n'est -spécifié, cette fonction est un NOP -}}} -!! {{{cpdir}}} -{{{ -copier un fichier dans un répertoire, ou le contenu d'un répertoire dans un -autre répertoire, que le répertoire source soit un lien symbolique ou -non. Cette fonction existe parce que le comportement de "cp_a src dest" n'est -pas consistant selon les plateformes, surtout si src est un lien symbolique -sur un répertoire: parfois on copie le lien, parfois on copie le contenu du -répertoire, parfois on copie le répertoire... -La copie est faite avec rsync si possible. Les options du tableau -__CPDIR_RSYNC_ARGS sont rajoutées aux options standard de rsync. -}}} -!! {{{cpnovcs}}} -{{{ -copier le fichier/répertoire $1 *dans* le *répertoire* $2 avec rsync. Les -options du tableau __CPNOVCS_RSYNC_ARGS sont rajoutées aux options standard -de rsync. -Si $1 est un répertoire, la copie est faite en ignorant les sous-répertoires -de VCS (.svn, CVS). En ce qui concerne les répertoire de VCS, git aussi est -supporté, mais uniquement s'il est à la racine du transfert. -Si $1 se termine par un '/', c'est le contenu du répertoire qui est copié, pas -le répertoire lui-même. Si rsync n'est pas trouvé sur le système, alors on -fait une copie standard qui inclue les répertoires de VCS. -}}} -!! {{{cpvcs}}} -{{{ -comme cpnovcs, mais ne pas ignorer les répertoires de VCS -}}} -!! {{{cpdirnovcs}}} -{{{ -Le pendant de cpdir, mais en ignorant les sous-répertoires de VCS: copier le -contenu du répertoire $1 dans le répertoire $2 -}}} -!! {{{doinplace}}} -{{{ -Filtrer le fichier $1 à travers la commande $2..$*, puis remplacer le fichier -s'il n'y a pas eu d'erreur. Retourner le code d'erreur de la commande. Si $1 -n'est pas spécifié ou vaut -, filtrer l'entrée standard vers la sortie -standard. -La variante doinplacef remplace le fichier quelque soit le code de retour de -la commande. A utiliser avec des commandes comme grep qui peuvent retourner -FAUX s'ils ne trouvent pas le motif -}}} -!! {{{doinplacef}}} -!! {{{stripnl}}} -{{{ -Supprimer les caractères de fin de ligne de la chaine en entrée -}}} -!! {{{nl2lf}}} -!! {{{nl2crlf}}} -!! {{{nl2cr}}} -!! {{{list_all}}} -{{{ -Lister les fichiers ou répertoires du répertoire $1, un par ligne -Les répertoires . et .. sont enlevés de la liste -$1=un répertoire dont le contenu doit être listé -$2..@=un ensemble de patterns pour le listage -}}} -!! {{{list_files}}} -{{{ -Lister les fichiers du répertoire $1, un par ligne -$1=un répertoire dont le contenu doit être listé. -$2..@=un ensemble de patterns pour le listage -}}} -!! {{{list_dirs}}} -{{{ -Lister les répertoires du répertoire $1, un par ligne -Les répertoires . et .. sont enlevés de la liste -$1=un répertoire dont le contenu doit être listé. -$2..@=un ensemble de patterns pour le listage -}}} -!! {{{array_lsall}}} -{{{ -Lister les fichiers avec `list_all $2 $3...`, et les mettre dans le -tableau $1. Le tableau contient les chemins complets, par seulement les -noms comme avec list_all -}}} -!! {{{array_lsdirs}}} -{{{ -Lister les fichiers avec `list_dirs $2 $3...`, et les mettre dans le -tableau $1. Le tableau contient les chemins complets, par seulement les -noms comme avec list_dirs -}}} -!! {{{array_lsfiles}}} -{{{ -Lister les fichiers avec `list_files $2 $3...`, et les mettre dans le -tableau $1. Le tableau contient les chemins complets, par seulement les -noms comme avec list_files -}}} -!! {{{filter_empty}}} -{{{ -Filtrer l'entrée standard en enlevant les lignes vides -}}} -!! {{{filter_vcspath}}} -{{{ -L'entrée standard étant une liste de chemins, filtrer les fichiers et -répertoire qui ont un rapport avec subversion ou git -}}} -!! {{{merge_contlines}}} -{{{ -Avec les lignes lues sur stdin, fusionner celles qui se terminent par \ avec -les suivantes. -}}} -!! {{{filter_comment}}} -{{{ -Filtrer un fichier de configuration lu sur stdin en enlevant les commentaires -et les lignes vides. -Avec $1==-m, fusionner les lignes qui se terminent par \ avec les suivantes -Comme filter_conf(), les commentaires doivent être sur une ligne à part. -Contrairement à filter_conf, il n'est pas nécessaire que le caractère '#' soit -en début de ligne: il peut apparaitre après des espaces et des tabulations. De -même, une ligne qui ne contient que des espaces et des tabulations est -considérée comme vide. -}}} -!! {{{filter_conf}}} -{{{ -filtrer un fichier de configuration lu sur stdin en enlevant les commentaires -et les lignes vides. Une ligne n'est considérée commentaire que si '#' est un -première position. Utiliser filter_comment() si les commentaire peuvent -commencer par des caractères espace et tabulation. -Si $1==-m, fusionner les lignes qui se terminent par \ avec les suivantes -}}} -!! {{{is_archive}}} -{{{ -tester si l'extension d'un fichier indique que c'est une archive -}}} -!! {{{extract_archive}}} -{{{ -Extraire le contenu de l'archive $1 dans le répertoire ${2:-.} -}}} -!! {{{get_archive_basename}}} -{{{ -Obtenir le nom de base de l'archive $1 -}}} -!! {{{get_archive_appname}}} -{{{ -Obtenir le nom probable de l'application ou du framework contenu dans -l'archive $1, e.g: -get_archive_versionsuffix app-0.1.tgz ---> app -}}} -!! {{{get_archive_versionsuffix}}} -{{{ -Obtenir la valeur probable de la version de l'application ou du framework -contenu dans l'archive $1, avec le caractère de séparation, e.g: -get_archive_versionsuffix app-0.1.tgz ---> -0.1 -}}} -!! {{{get_archive_version}}} -{{{ -Obtenir la valeur probable de la version de l'application ou du framework -contenu dans l'archive $1, e.g: -get_archive_versionsuffix app-0.1.tgz ---> 0.1 -}}} -!! {{{dump_usernames}}} -{{{ -Placer dans le tableau $1 la liste des utilisateurs du système -Cette implémentation consulte /etc/passwd et liste tous les utilisateurs dont -le homedir se trouve dans /home, et dont l'uid est >=500 -}}} -!! {{{resolv_ips}}} -{{{ -Placer dans le tableau $1(=ips) la liste des adresses ip correspondant à -l'hôte $2. La résolution est effectuée avec la commande host. -}}} -!! {{{resolv_hosts}}} -{{{ -Placer dans le tableau $1(=hosts) la liste des hôtes correspondant à -l'adresse ip $2. La résolution est effectuée avec la commande host. -}}} -!! {{{runscript_as}}} -{{{ -Utiliser bash pour lancer le script $2 avec les arguments $3..$n afin qu'il -tourne avec les droits d'un autre user $1(=root). Si $2=exec, utiliser exec -pour lancer le script et ses arguments qui commencent à partir de $3, ce qui -fait que cette fonction ne retourne pas. -Attention! cette fonction ne teste pas avec si on est déjà le user $1. Il y a -donc un risque de boucle infinie si on ne teste pas le user courant. -}}} -!! {{{runscript_as_root}}} -{{{ -Utiliser bash pour lancer le script $1 avec les arguments $2..$* avec les -droits de root. Si on est déjà en root, le script est simplement lancé. Sinon, -utiliser runscript_as pour lancer le script avec les droits de root. -}}} -!! {{{run_as}}} -{{{ -Relancer le script courant afin qu'il tourne avec les droits d'un autre user -$1(=root) -Attention! cette fonction ne teste pas avec si on est déjà ce user. Il y a -donc un risque de boucle infinie si on ne teste pas le user courant. -Il faut lancer cette fonction avec les arguments du script en cours. Par -exemple:: -run_as root "$@" -Si $2=--noexec, on n'utilise pas la fonction exec, ce qui fait que la fonction -retourne. Sinon, on peut considérer que cette fonction ne retourne jamais -}}} -!! {{{run_as_root}}} -{{{ -relancer le script courant afin qu'il tourne en root si on est pas en déjà -root. Sinon, cette fonction est un nop. -}}} -!! {{{check_user}}} -{{{ -Vérifier si le user courant est l'un des users $1..* -}}} -!! {{{ensure_user}}} -{{{ -Vérifier si le user courant est l'un des users $1..N où N est la position du -premier "--". Si ce n'est pas le cas et que l'on est root, relancer le script -avec ce user grâce à la fonction run_as() -Retourner 1 si ce n'était pas le bon user. Retourner 10 si ce n'était pas le -bon user et que l'on n'est pas root (donc impossible à priori de relancer le -script avec le bon user). Retourner 11 si l'utilisateur a choisi de ne pas -lancer le script avec le bon utilisateur -A utiliser de cette manière: -if ensure_user users... -- args; then -# ... on est avec le bon user; faire les opérations -else -# ... ce code n'est exécuté que si une erreur s'est produite, ou si ce -# n'était pas le bon user et que l'option --noexec est utilisée -fi -}}} -!! {{{check_hostname}}} -{{{ -Vérifier si le hostname courant est l'un des hôtes $1..* -localhost matche toujours -}}} -!! {{{check_userhostname}}} -{{{ -Vérifier si le hostname et éventuellement le user courant sont l'un des -arguments $1..* -Chaque argument est de la forme [user@]host, mais le test ne tient compte que -du nom de l'hôte, sans tenir compte du domaine. Si le user n'est pas spécifié, -le test ne porte que sur hostname. -}}} -!! {{{ensure_hostname}}} -{{{ -Vérifier si le hostname et le user courant sont l'un des arguments $1..* -Chaque argument est de la forme [user@]host, mais le test ne tient compte que -du nom de l'hôte, sans tenir compte du domaine. -Si user est spécifié: -- Si on est sur le bon hôte mais pas le bon user, ensure_user est lancé avec -l'argument approprié pour relancer le script -Si l'argument était de la forme userhost:path, le répertoire courant est -changé avant de lancer le script avec le bon utilisateur. -Sinon (si user n'est pas spécifié): -- Si on n'est pas sur le bon hôte, après confirmation le script est lancé avec -ssh sur l'hôte distant avec le user spécifié (qui vaut par défaut root). Ce -script DOIT exister sur l'hôte distant avec le même chemin. -Si l'argument était de la forme userhost:path, le répertoire courant distant -est changé avant de lancer le script -Si on est avec le bon user sur le bon hôte, le répertoire courant n'est jamais -changé. -Retourner 1 si ce n'était pas le bon user. Retourner 10 si ce n'était pas le -bon user et que l'on n'est pas root (donc impossible à priori de relancer le -script avec le bon user). Retourner 11 si l'utilisateur a choisi de ne pas -lancer le script sur l'hôte distant. Retourner 12 si une erreur s'est produite -avec ssh. -A utiliser de cette manière: -if ensure_hostname user@host... -- args; then -# ... on est [avec le bon user] sur le bon hôte; faire les opérations -else -# ... ce code n'est exécuté que si une erreur s'est produite, ou si ce -# n'était pas le bon user et que l'option --noexec est utilisée -fi -}}} -!! {{{sqvals}}} -!! {{{quoted_values}}} -!! {{{formatcsv}}} -!! {{{awkdef}}} -{{{ -Afficher un script à insérer au début d'un script awk. Ce script définit dans -une section BEGIN{} les variables donnés en arguments, et avec l'option -f, -des fonctions utiles. Si une valeur ne ressemble pas à une définition de -variable, l'analyse des variables s'arrête et le reste des arguments est -inséré tel quel. Cette fonction peut être utilisée de cette manière: -awk "$(awkdef -f var=value... 'script awk')" -Normalement, les variables définies sont scalaires, avec une syntaxe de la -forme var[:type]=value. type peut valoir str ou int, pour forcer le type de la -variable créée dans awk. -Il est possible d'utiliser la syntaxe awk_array[@]=bash_array ou array[@] (qui -est équivalente à array[@]=array) pour initialiser le tableau awk_array, qui -contiendra toute les valeurs du tableau nommé bash_array, avec les indices de -1 à N, N étant le nombre d'éléments du tableau bash_array. La variable -awk_array_count est aussi initialisée, et contient le nombre d'éléments du -tableau -La syntaxe "awk_array[@]=<\n..." permet de spécifier les valeurs du tableau, -une par ligne, e.g: -$'values[@]=<\nvalue1\nvalue2' -pour un tableau values qui contiendra deux valeurs: value1 et value2 -Avec l'option -f, des fonctions supplémentaires sont définies. Elles sont -décrites dans le module awk. -}}} -!! {{{lawkrun}}} -{{{ -wrapper pour lancer awk avec un script préparé par awkdef. Les définitions et -les arguments sont séparés par --, e.g. -awkrun var0=value0 var1=value1 script -- input0 input1 -}}} -!! {{{cawkrun}}} -!! {{{awkrun}}} -!! {{{lf_trylock}}} -{{{ -USAGE -lf_trylock [-h max_hours] /path/to/lockfile -OPTIONS -lockfile -fichier qui doit contenir le verrou --h max_hours -Nombre d'heures (par défaut 4) au bout duquel afficher stale -Sinon, afficher locked -Retourne 0 si le verrou a été placé correctement. Il ne faut pas oublier de -supprimer le fichier. Le mieux est de le faire supprimer automatiquement par -autoclean: -lockfile=... -case "$(lf_trylock "$lockfile")" in -locked) ...;; -stale) ...;; -esac -autoclean "$lockfile" -Sinon, retourner 1 et afficher l'une des deux valeurs suivantes: -- stale si le verrou a déjà été placé, depuis au moins max_hours heures -- locked si le verrou a déjà été placé -- retry si une erreur s'est produite pendant la pose du verrou ou sa -lecture. Cela peut se produire si les droits ne sont pas suffisants pour -écrire dans le répertoire destination, ou si le fichier a été supprimé -avant sa lecture (race-condition). Dans ce dernier cas, reessayer permettra -d'acquérir le verrou -}}} -!! {{{pidfile_set}}} -{{{ -USAGE -pidfile_set [-p pid] /path/to/pidfile -OPTIONS -pidfile -fichier qui doit contenir le pid du script --p pid -spécifier le pid. par défaut, utiliser $$ --r si pidfile existe mais que le processus ne tourne plus, faire -comme si le fichier n'existe pas. -Retourner 0 si le pid a été correctement écrit dans le fichier. Ce fichier -sera supprimé automatiquement en fin de script -Retourner 1 si le fichier existe déjà et que le processus est en train de -tourner. -Retourner 2 si le fichier existe déjà mais que le processus ne tourne plus. -Retourner 10 si autre erreur grave s'est produite (par exemple, s'il manque le -chemin vers pidfile, ou si le fichier n'est pas accessible en écriture.) -}}} -!! {{{pidfile_check}}} -{{{ -USAGE -pidfile_check /path/to/pidfile -OPTIONS -pidfile -fichier qui doit contenir le pid d'un processus -Cette fonction permet de vérifier si le processus associé à un fichier de pid -est en train de tourner. -Retourner 0 si le fichier de pid existe et que le process du pid spécifié est -en train de tourner. Retourner 1 sinon. -Retourner 10 si erreur grave s'est produite (par exemple, s'il manque le -chemin vers pidfile, ou si le fichier n'est pas accessible en lecture.) -}}} -!! {{{page_maybe}}} -{{{ -Utiliser less, si possible, pour afficher le flux en entrée. Si le terminal -n'est pas interactif ou si le nombre de lignes en entrée est inférieur au -nombre de lignes du terminal, afficher simplement le flux. -Les arguments de cette fonction sont passés à less -}}} -!! {{{utools_local}}} -{{{ -Afficher les commandes pour rendre locales certaines variables en fonction des -arguments: -- opts rend locale args, pour utiliser parse_opts() à l'intérieur d'une -fonction. -- verbosity et interaction rendent respectivement locales __verbosity et -__interaction. Ceci est utile pour pouvoir appeler sans risque de pollution -de l'environnement une fonction qui utilise parse_opts() avec les -définitions de PRETTYOPTS. -Si aucun arguments n'est fourni, toutes les définitions sont affichées. -}}} -!! {{{stdredir}}} -{{{ -Lancer la commande $4..@ en redirigeant stdin depuis $1, stdout vers $2, -stderr vers $3. Si $1 est vide ou vaut /dev/stdin, la redirection n'est -pas faite. Si $2 est vide ou vaut /dev/stdout, la redirection n'est pas -faite. Si $3 est vide ou vaut /dev/stderr, la redirection n'est pas faite. -Cette fonction existe parce que sur certaines versions de bash, il semble -que les redirections /dev/std* ne sont pas traitées de façon particulière. -De plus, sur des technologies telles que OpenVZ, les chemins /dev/std* ne -sont pas créés (parce que /proc/self/fd/* n'est pas accessible). Donc, -dans de rares cas où le script tourne sur OpenVZ avec une version de bash -qui est buggée, la redirection n'est pas faite correctement. -}}} -!! {{{isatty}}} -{{{ -tester si STDOUT n'est pas une redirection -}}} -!! {{{in_isatty}}} -{{{ -tester si STDIN n'est pas une redirection -}}} -!! {{{out_isatty}}} -{{{ -tester si STDOUT n'est pas une redirection -}}} -!! {{{err_isatty}}} -{{{ -tester si STDERR n'est pas une redirection -}}} -!! {{{die}}} -!! {{{die_unless}}} -{{{ -Afficher $-1 et quitter le script avec die() si la commande $1..-2 retourne -FAUX -}}} -!! {{{eerror_unless}}} -{{{ -Afficher $-1 avec eerror() et retourner $? si la commande $1..-2 retourne FAUX -}}} -!! {{{die_if}}} -{{{ -Afficher $-1 et quitter le script avec die() si la commande $1..-2 retourne -VRAI -}}} -!! {{{eerror_if}}} -{{{ -Afficher $-1 avec eerror() et retourner le code d'erreur 1 si la commande -$1..-2 retourne VRAI -}}} -!! {{{noerror}}} -{{{ -lancer la commande "$@" et masquer son code de retour -}}} -!! {{{noout}}} -{{{ -lancer la commande "$@" en supprimant sa sortie standard -}}} -!! {{{noerr}}} -{{{ -lancer la commande "$@" en supprimant sa sortie d'erreur -}}} -!! {{{tooenc}}} -{{{ -Transformer la valeur $1 de l'encoding $2(=$OENC) vers l'encoding de sortie -$3=($UTOOLS_OUTPUT_ENCODING) -}}} -!! {{{uecho}}} -!! {{{tooenc_}}} -{{{ -Transformer la valeur $1 de l'encoding $2(=$OENC) vers l'encoding de sortie -$3=($UTOOLS_OUTPUT_ENCODING) -}}} -!! {{{uecho_}}} -!! {{{toienc}}} -{{{ -Transformer la valeur $1 de $2(=$IENC) vers l'encoding d'entrée -$3(=$UTOOLS_INPUT_ENCODING) -}}} -!! {{{uread}}} -{{{ -Lire une valeur sur stdin et la placer dans la variable $1. On assume que la -valeur en entrée est encodée dans l'encoding d'entrée par défaut -}}} -!! {{{stooenc}}} -{{{ -Transformer la valeur lue sur stdin de $OENC vers l'encoding de sortie par -défaut ($UTOOLS_OUTPUT_ENCODING) -}}} -!! {{{stoienc}}} -{{{ -Transformer la valeur lue sur stdin de $IENC vers l'encoding d'entrée par -défaut ($UTOOLS_INPUT_ENCODING) -}}} -!! {{{elogto}}} -{{{ -Activer UTOOLS_EDATE et rediriger STDOUT et STDERR vers le fichier $1 -Si deux fichiers sont spécifiés, rediriger STDOUT vers $1 et STDERR vers $2 -Si aucun fichier n'est spécifié, ne pas faire de redirection -Si la redirection est activée, forcer l'utilisation de l'encoding UTF8 -Si UTOOLS_ELOG_OVERWRITE=1, alors le fichier en sortie est écrasé. Sinon, les -lignes en sortie lui sont ajoutées -}}} -!! {{{set_verbosity}}} -!! {{{set_interaction}}} -!! {{{show_error}}} -{{{ -tester respectivement si on doit afficher les messages d'erreur, -d'avertissement, d'information, de debug -}}} -!! {{{show_warn}}} -!! {{{show_info}}} -!! {{{show_verbose}}} -!! {{{show_debug}}} -!! {{{check_verbosity}}} -!! {{{get_verbosity_option}}} -!! {{{check_interaction}}} -!! {{{is_interaction}}} -!! {{{get_interaction_option}}} -!! {{{eflush}}} -{{{ -Afficher les messages en attente -}}} -!! {{{eclearp}}} -{{{ -Supprimer les message en attente -}}} -!! {{{eerror}}} -{{{ -Afficher un message d'erreur -}}} -!! {{{ewarn}}} -{{{ -Afficher un message d'avertissement -}}} -!! {{{enote}}} -{{{ -Afficher un message d'information de même niveau qu'un avertissement -}}} -!! {{{ebanner}}} -{{{ -Afficher un message très important encadré, puis attendre 5 secondes -}}} -!! {{{eimportant}}} -{{{ -Afficher un message très important -}}} -!! {{{eattention}}} -{{{ -Afficher un message important -}}} -!! {{{einfo}}} -{{{ -Afficher un message d'information -}}} -!! {{{eecho}}} -{{{ -Afficher un message d'information sans préfixe -}}} -!! {{{eecho_}}} -!! {{{edebug}}} -{{{ -Afficher un message de debug -}}} -!! {{{trace}}} -{{{ -Afficher la commande $1..@, la lancer, puis afficher son code d'erreur si une -erreur se produit -}}} -!! {{{trace_error}}} -{{{ -Lancer la commande $1..@, puis afficher son code d'erreur si une erreur se -produit. La différence avec trace() est que la commande n'est affichée que si -une erreur se produit. -}}} -!! {{{etitle}}} -{{{ -Afficher le titre $1, qui est le début éventuel d'une section. Les section -imbriquées sont affichées indentées. La section n'est pas terminée, et il faut -la terminer explicitement avec eend, sauf dans certains cas précis: -- Si $2..$* est spécifié, c'est une commande. Lancer la commande dans le -contexte de la section. Puis, la section est automatiquement terminée sauf si -l'option -s est spécifiée, auquel cas la section reste ouverte. Si l'option -p -est spécifiée, eclearp() est appelé pour purger les messages en attente -- Dans le cas contraire, l'option -s est ignorée: la section doit toujours -être terminée explicitement. -La fonction etitled() est comme etitle(), mais le titre n'est pas affiché -immédiatement. L'affichage effectif est effectué dès qu'une fonction e* est -utilisée. Ceci permet, avec la fonction eclearp(), de ne pas afficher de titre -pour une section vide. -}}} -!! {{{etitled}}} -!! {{{estep}}} -{{{ -Afficher la description d'une opération. Cette fonction est particulièrement -appropriée dans le contexte d'un etitle. -Les variantes e (error), w (warning), n (note), i (info) permettent d'afficher -des couleurs différentes, mais toutes sont du niveau info. -}}} -!! {{{estepe}}} -!! {{{estepw}}} -!! {{{estepn}}} -!! {{{estepi}}} -!! {{{estep_}}} -!! {{{estepe_}}} -!! {{{estepw_}}} -!! {{{estepn_}}} -!! {{{estepi_}}} -!! {{{ebegin}}} -{{{ -Afficher le message $1, qui décrit le début d'une opération. Cette fonction -débute une section, qu'il faut terminer avec eend. -Si $2..$* est spécifié, c'est une commande. Lancer la commande dans le -contexte de la section. Puis, la section est terminée automatiquement, sauf si -l'option -s est spécifiée, auquel cas la section reste ouverte. -}}} -!! {{{edot}}} -{{{ -Afficher une étape d'une opération, matérialisée par un point '.' ou une -croix 'x' en cas de succès ou d'erreur. Cette fonction est particulièrement -appropriée dans le contexte d'un ebegin. -}}} -!! {{{edotw}}} -{{{ -Afficher un avertissement comme étape d'une opération, matérialisée par une -lettre 'w' (typiquement de couleur jaune). Cette fonction est particulièrement -appropriée dans le contexte d'un ebegin. -}}} -!! {{{ewait}}} -{{{ -Afficher les étapes d'une opération qui dure, matérialisées par des '+' toutes -les secondes tant que le processus $1 tourne. -A utiliser de cette manière: -ebegin "msg" -cmd & -ewait $! -eend -}}} -!! {{{eend}}} -{{{ -Terminer une section. -Avec l'option -c, remettre à zéro toutes les informations de section -Si la section en cours est un ebegin, afficher la fin de l'opération: [ok] ou -[error] en fonction du code de retour de la dernière commande (ou de $1 si -cette valeur est donnée) -Si la section en cours est un etitle, marquer la fin de la section concernée -par le titre. -}}} -!! {{{elinedots}}} -{{{ -Afficher un message comme avec ebegin "$1", puis afficher un point '.' pour -chaque ligne lue sur stdin. Cela permet de suivre une opération. En mode -DEBUG, afficher la ligne affichée plutôt qu'un point. -Si $2..$* sont spécifiés, lancer la commande et suivre sa sortie. Ainsi, -'elinedots msg cmd args' est un raccourci pour 'cmd args | elinedots msg' -}}} -!! {{{ask_yesno}}} -{{{ -Afficher le message $1 suivi de [oN] ou [On] suivant que $2 vaut O ou N, puis -lire la réponse. Retourner 0 si la réponse est vrai, 1 sinon. -Si $1 est une option, elle est utilisée avec check_interaction pour savoir si -on est en mode interactif ou non. A ce moment-là, les valeurs sont décalées -($2=message, $3=default) -Si $2 vaut C, la valeur par défaut est N si on est interactif, O sinon -Si $2 vaut X, la valeur par défaut est O si on est interactif, N sinon -}}} -!! {{{read_value}}} -{{{ -Afficher le message $1 suivi de la valeur par défaut [$3] si elle est non -vide, puis lire la valeur donnée par l'utilisateur. Cette valeur doit être non -vide si $4(=O) est vrai. La valeur saisie est placée dans la variable -$2(=value) -Si $1 est une option, elle est utilisée avec check_interaction pour savoir si -on est en mode interactif ou non. A ce moment-là, les valeurs sont décalées -($2=message, $3=variable, $4=default, $5=required) -En mode non interactif, c'est la valeur par défaut qui est sélectionnée. Si -l'utilisateur requière que la valeur soit non vide et que la valeur par défaut -est vide, afficher un message d'erreur et retourner faux -read_password() est comme read_value(), mais la valeur saisie n'est pas -affichée, ce qui la rend appropriée pour la lecture d'un mot de passe. -}}} -!! {{{read_password}}} -!! {{{simple_menu}}} -{{{ -Afficher un menu simple dont les éléments sont les valeurs du tableau -$2(=options). L'option choisie est placée dans la variable $1(=option) --t TITLE: spécifier le titre du menu --m YOUR_CHOICE: spécifier le message d'invite pour la sélection de l'option --d DEFAULT: spécifier l'option par défaut. Par défaut, prendre la valeur -actuelle de la variable $1(=option) -}}} -!! {{{actions_menu}}} -{{{ -Afficher un menu dont les éléments sont les valeurs du tableau $4(=options), -et une liste d'actions tirées du tableau $3(=actions). L'option choisie est -placée dans la variable $2(=option). L'action choisie est placée dans la -variable $1(=action) -Un choix est saisi sous la forme [action]num_option --t TITLE: spécifier le titre du menu --m OPT_YOUR_CHOICE: spécifier le message d'invite pour la sélection de -l'action et de l'option --M ACT_YOUR_CHOICE: spécifier le message d'invite dans le cas où aucune option -n'est disponible. Dans ce cas, seules les actions vides sont possibles. --e VOID_ACTION: spécifier qu'une action est vide, c'est à dire qu'elle ne -requière pas d'être associée à une option. Par défaut, la dernière action -est classée dans cette catégorie puisque c'est l'action "quitter" --d DEFAULT_ACTION: choisir l'action par défaut. par défaut, c'est la première -action. --q QUIT_ACTION: choisir l'option "quitter" qui provoque la sortie du menu sans -choix. par défaut, c'est la dernière action. --o DEFAULT_OPTION: choisir l'option par défaut. par défaut, prendre la valeur -actuelle de la variable $2(=option) -}}} -!! {{{autoclean}}} -{{{ -Ajouter $1..$n à la liste des fichiers à supprimer à la fin du programme -}}} -!! {{{ac_cleanall}}} -{{{ -Supprimer *tous* les fichiers temporaires gérés par autoclean tout de suite. -}}} -!! {{{ac_clean}}} -{{{ -Supprimer les fichier temporaires $1..$* si et seulement s'ils ont été générés -par ac_set_tmpfile ou ac_set_tmpdir -}}} -!! {{{ac_set_tmpfile}}} -{{{ -Créer un fichier temporaire avec le motif $2, l'ajouter à la liste des -fichiers à supprimer en fin de programme, et mettre sa valeur dans la -variable $1 -En mode debug, si ($5 est vide ou ${!5} est une valeur vraie), et si $3 n'est -pas vide, prendre ce fichier au lieu de générer un nouveau fichier -temporaire. Si $4==keep, ne pas écraser le fichier $3 s'il existe. -}}} -!! {{{ac_set_tmpdir}}} -{{{ -Créer un répertoire temporaire avec le motif $2, l'ajouter à la liste des -fichiers à supprimer en fin de programme, et mettre sa valeur dans la -variable $1 -En mode debug, si ($4 est vide ou ${!4} est une valeur vraie), et si $3 n'est -pas vide, prendre ce nom de répertoire au lieu de créer un nouveau répertoire -temporaire -}}} -!! {{{debug_tee}}} -{{{ -En mode debug, passer le flux à travers la commande 'tee "$@"'. Sinon, le flux -est passé inchangé. -}}} -!! {{{get_user_defaults_file}}} -{{{ -Afficher le chemin vers le fichier utilisateur à éditer pour qu'il soit chargé -par 'set_defaults $1'. Ce fichier n'existe pas forcément; il faut peut-être le -créer. -}}} -!! {{{get_defaults_files}}} -{{{ -Initialiser le tableau $1(=defaults) avec la liste des fichiers qui seraient -chargés par la commande 'set_defaults $2..N' -}}} -!! {{{set_defaults}}} -{{{ -Pour chaque argument, sourcer /etc/default/$arg *et* (en priorité -~/etc/default.$HOSTNAME/$arg ou à défaut ~/etc/default/$arg) si ceux-ci -existent. *Sinon*, lire $scriptdir/lib/default/$arg si ce fichier existe -}}} -!! {{{myhost}}} -{{{ -Afficher le nom d'hôte pleinement qualifié, en faisant appel à la commande -hostname. Par comparaison, $MYHOST est fourni par bash. -}}} -!! {{{myhostname}}} -{{{ -Afficher le nom d'hôte sans domaine, en faisant appel à la commande -hostname. Par comparaison, $MYHOSTNAME est fourni par bash. -}}}-
!! {{{is_cgi}}} -{{{ -Tester si on est lancé comme un script CGI -}}} -!! {{{ctype_header}}} -{{{ -Générer une en-tête Content-Type: avec la valeur $1[=text/html] -}}} -!! {{{cdisp_header}}} -{{{ -Générer une en-tête Content-Disposition: avec le type $2[=attachment] et -le nom de fichier $1[=result] -}}} -!! {{{nocache_header}}} -{{{ -Générer des en-têtes qui désactivent la mise en cache du contenu -}}} -!! {{{cgicontent}}} -{{{ -Générer les en-têtes nécessaire avant de servir le contenu. -$1(=text/html) est le type de contenu. S'il faut servir le contenu avec -une disposition "attachment", $2 est le nom de fichier à proposer à -l'utilisateur. Si $3 est spécifié, c'est le chemin vers le fichier dont le -contenu doit être servi. -$4..* sont des en-têtes supplémentaires à rajouter -}}} -!! {{{cgicontent_nocache}}} -{{{ -Générer les en-têtes nécessaire avant de servir le contenu. Rajouter les -entêtes pour désactiver la mise en cache. -$1(=text/html) est le type de contenu. S'il faut servir le contenu avec -une disposition "attachment", $2 est le nom de fichier à proposer à -l'utilisateur. Si $3 est spécifié, c'est le chemin vers le fichier dont le -contenu doit être servi. -$4..* sont des en-têtes supplémentaires à rajouter -}}} -!! {{{cgierror}}} -{{{ -Afficher les en-têtes pour désactiver la mise en cache, puis afficher un -message d'erreur puis arrêter le script -}}} -!! {{{cgiredirect}}} -{{{ -Afficher les en-têtes pour rediriger le client vers la page $1 puis -arrêter le script -}}}-
!! {{{cgiparams}}} -!! {{{cgilsxml}}} -!! {{{cgiupload}}}-
!! {{{conf_enable}}} -{{{ -Dans le fichier de configuration $1, activer les paramètres $2..* -Chaque argument de cette fonction correspond à une directive du fichier de -configuration et doit être de la forme name[=value] -Dans tous les cas, toutes les directives de ce nom sont recherchées et -décommentées. Si value est précisée, les directives sont mises à jour. Si -la directive ne figure pas dans le fichier, elle y est rajoutée à la fin -avec la valeur spécifiée. -Retourner 0 si une modification a été faite dans le fichier, 1 sinon -}}} -!! {{{conf_enableq}}} -{{{ -Comme conf_enable(), mais s'assure que les valeurs sont quotées dans le -fichier. Ceci permet de stocker des valeurs avec des espaces ou des -caractères spéciaux. -}}} -!! {{{conf_disable}}} -{{{ -Dans le fichier de configuration $1, désactiver les paramètres $2..* -Chaque argument de cette fonction correspond à une directive du fichier de -configuration et doit être de la forme name[=value] -Toutes les directives de ce noms sont recherchées et commentées. La valeur -si elle est spécifiée, est ignorée. Si la directive ne figure pas dans le -fichier, c'est un NOP. -Retourner 0 si une modification a été faite dans le fichier, 1 sinon -}}} -!! {{{conf_append}}} -{{{ -Dans le fichier de configuration $1, augmenter les valeurs des variables -correspondant aux paramètres $2..* -Chaque argument de cette fonction correspond à une variable du fichier de -configuration, et doit être de la forme name=value -Une ligne 'name="${name:+$name:}$value"' est générée à la fin du fichier -de configuration. -Par défaut, le séparateur CONF_APPEND_SEP vaut ':', mais il est possible -de changer cette valeur, de façon globale -Retourner 0 si une modification a été faite dans le fichier, 1 sinon -}}} -!! {{{conf_array_append}}} -{{{ -Dans le fichier de configuration $1, augmenter les valeurs des variables -de tableau correspondant aux paramètres $2..* -Chaque argument de cette fonction correspond à une variable du fichier de -configuration, et doit être de la forme name=value -Une ligne name=("${name[@]}" "$value") est générée à la fin du fichier de -configuration -Retourner 0 si une modification a été faite dans le fichier, 1 sinon -}}} -!! {{{conf_check}}} -{{{ -Dans le fichier de configuration $1, tester si tous les paramètres $2..* -sont présents. -Chaque argument de cette fonction correspond à une variable du fichier de -configuration, et doit être de la forme name[=value] -Si une valeur est spécifiée, vérifier que le fichier contient la valeur -correspondante. Sinon, tester uniquement la présence de la directive. -}}} -!! {{{aconf_enable}}} -{{{ -Dans le fichier de configuration $1, activer les paramètres $2..* -Chaque argument de cette fonction correspond à une directive du fichier de -configuration et doit être de la forme name[=value] -Toutes les directives de ce nom sont recherchées et décommentées, et la -valeur mise à jour. Si la directive ne figure pas dans le fichier, elle y -est rajoutée à la fin. A cause du mode opératoire, cette fonction ne -convient pas pour les directives dont le nom peut apparaitre plusieurs -fois dans le fichier -Retourner 0 si une modification a été faite dans le fichier, 1 sinon -}}} -!! {{{aconf_disable}}} -{{{ -Dans le fichier de configuration $1, désactiver les paramètres $2..* -Chaque argument de cette fonction correspond à une directive du fichier de -configuration et doit être de la forme name[=value] -Si la valeur est précisée, la directive correspondant à ce nom et cette -valeur est recherchée et commentée. Sinon, toutes les directives de ce -noms sont recherchées et commentées. Si la directive ne figure pas dans le -fichier, c'est un NOP. -Retourner 0 si une modification a été faite dans le fichier, 1 sinon -}}} -!! {{{aconf_append}}} -{{{ -Dans le fichier de configuration $1, ajouter des directives correspondant -aux paramètres $2..* -Chaque argument de cette fonction correspond à une directive du fichier de -configuration et doit être de la forme name=value -Une ligne '$name $value' est ajoutée à la fin du fichier de configuration -Retourner 0 si une modification a été faite dans le fichier, 1 sinon -}}} -!! {{{aconf_array_append}}} -!! {{{aconf_check}}} -{{{ -Dans le fichier de configuration $1, tester si tous les paramètres $2..* -sont présents. -Chaque argument de cette fonction correspond à une variable du fichier de -configuration, et doit être de la forme name[=value] -Si une valeur est spécifiée, vérifier que le fichier contient la valeur -correspondante. Sinon, tester uniquement la présence de la directive. -}}} -!! {{{mconf_enable}}} -{{{ -Dans le fichier de configuration $1, activer les paramètres $3..* de la -section $2 -Chaque argument de cette fonction correspond à une directive du fichier de -configuration et doit être de la forme name[=value] -Toutes les directives de ce nom sont recherchées et décommentées, et la -valeur mise à jour. Si la directive ne figure pas dans le fichier, elle y -est rajoutée à la fin. A cause du mode opératoire, cette fonction ne -convient pas pour les directives dont le nom peut apparaitre plusieurs -fois dans le fichier -Retourner 0 si une modification a été faite dans le fichier, 1 sinon -Cette fonction nécessite gawk et ignore la locale -}}} -!! {{{mconf_disable}}} -{{{ -Dans le fichier de configuration $1, désactiver les paramètres $3..* de la -section $2. -Chaque argument de cette fonction correspond à une directive du fichier de -configuration et doit être de la forme name[=value] -Si la valeur est précisée, la directive correspondant à ce nom et cette -valeur est recherchée et commentée. Sinon, toutes les directives de ce -noms sont recherchées et commentées. Si la directive ne figure pas dans le -fichier, c'est un NOP. -Retourner 0 si une modification a été faite dans le fichier, 1 sinon -Cette fonction nécessite gawk et ignore la locale -}}} -!! {{{mconf_append}}} -{{{ -Dans le fichier de configuration $1, ajouter des directives correspondant -aux paramètres $3..* dans la section $2 -Chaque argument de cette fonction correspond à une directive du fichier de -configuration et doit être de la forme name=value -Une ligne '$name = $value' est ajoutée à la fin de la section, qui est -créée si nécessaire à la fin du fichier de configuration -Retourner 0 si une modification a été faite dans le fichier, 1 sinon -Cette fonction nécessite gawk et ignore la locale -}}} -!! {{{mconf_array_append}}} -!! {{{mconf_check}}} -{{{ -Dans le fichier de configuration $1, tester si tous les paramètres $3..* -sont présents dans la section $2 -Chaque argument de cette fonction correspond à une variable du fichier de -configuration, et doit être de la forme name[=value] -Si une valeur est spécifiée, vérifier que le fichier contient la valeur -correspondante. Sinon, tester uniquement la présence de la directive. -Cette fonction nécessite gawk et ignore la locale -}}} -!! {{{gconf_addline}}} -{{{ -USAGE -gconf_addline configfile -a BEGIN -z END NEWLINE -Dans le fichier de configuration $1, ajouter la ligne NEWLINE entre les lignes -BEGIN et END. --a BEGIN -Spécifier une expression pour matcher une ligne de type BEGIN. Si -cette option n'est pas spécifiée, on considère que le début de fichier -matche la ligne BEGIN: la ligne NEWLINE est ajoutée dès que possible. -Les lignes sont matchées dans l'ordre, i.e. avec '-a 1 -a 2', il faut -d'abord trouver la ligne 1 puis la ligne 2, sinon, le test n'est pas -concluant. --t LINE -Si après avoir matché toutes les lignes BEGIN, la ligne LINE est -rencontrée, alors considérer que la ligne à rajouter existe déjà et -qu'il ne faut pas la rajouter de nouveau --r LINE -Si après avoir matché toutes les lignes BEGIN, la ligne LINE est -rencontrée, alors considérer que la ligne à rajouter existe et qu'il -faut la mettre à jour. Supprimer la ligne existante et la remplacer -par la nouvelle ligne. --z END -Spécifier une expression pour matcher la ligne de type END. Que cette -option soit ou non spécifiée, on considère toujours que la fin de -fichier matche la ligne END. Ainsi, si END n'est pas trouvée, la ligne -NEWLINE est ajoutée à la fin du fichier. -Dès que la ligne END est rencontrée, et si aucun des tests -t ou -r -n'est concluant, alors ajouter la nouvelle ligne avant celle-ci --n MAX[=1] -Ajouter au plus MAX occurences de NEWLINE. Après avoir matché END, le -cycle recommence, au plus MAX-1 fois. Utiliser MAX=-1 pour désactiver -la limite -Cette fonction nécessite gawk et ignore la locale -Retourner 0 si l'ajout s'est fait correctement. Retourner 1 si BEGIN n'a -pas été trouvé, et donc aucun ajout n'a été effectué. Retourner 2 si une -erreur quelconque s'est produite -}}} -!! {{{writelines_maybe}}}-
!! {{{add_to_crontab}}} -!! {{{remove_from_crontab}}} -!! {{{disable_in_crontab}}} -!! {{{enable_in_crontab}}} -!! {{{ctnow}}} -{{{ -date +"%-M %-H %-d %-m %u" -}}} -!! {{{ctresolve}}} -!! {{{get_default_crontabdir_prefix}}} -!! {{{compute_crontab_prefixes}}} -!! {{{recompute_crontab_prefixes}}} -!! {{{get_CRONTABDIR_prefix}}}-
!! {{{pkg_check}}} -{{{ -Vérifier que les packages sont installés sur le système -}}} -!! {{{pkg_update}}} -{{{ -Mettre à jour la liste des packages silencieusement sans confirmation -}}} -!! {{{pkg_upgrade}}} -{{{ -Mettre à jour la liste des packages silencieusement sans confirmation -}}} -!! {{{pkg_install}}} -{{{ -Installer les packages silencieusement et sans confirmation -}}} -!! {{{pkg_installm}}} -{{{ -Installer les packages silencieusement et sans confirmation -Retourner 0 si au moins un des packages a été installé. Sinon, les -packages n'ont pas été installés, soit parce qu'ils sont déjà installé, -soit parce qu'il y a eu une erreur. -}}} -!! {{{pkg_check_install}}} -{{{ -Si le programme $1 n'existe pas, alors installer les packages $2..$@ -S'il n'y a pas d'arguments $2..$@ utiliser $1 comme nom de package -Retourner 0 si au moins un des packages a été installé -}}} -!! {{{service_disable}}} -{{{ -Désactiver le service $1 pour qu'il ne se lance pas automatiquement au -démarrage -}}} -!! {{{service_enable}}} -{{{ -Activer le service $1 pour qu'il se lance automatiquement au démarrage -}}} -!! {{{network_parse_confbr}}} -{{{ -network_parse_confbr "$confbr" br ifaces -}}} -!! {{{network_format_confbr}}} -{{{ -network_format_confbr "$br" ifaces --> "br:ifaces" -}}} -!! {{{network_parse_confip}}} -{{{ -network_parse_confip "$confip" iface gateway ipsuffixes -}}} -!! {{{network_parse_ipsuffix}}} -{{{ -network_parse_ipsuffix "$ipsuffix" ip suffix -}}} -!! {{{network_format_confip}}} -{{{ -network_format_confip "$iface" "$gateway" ipsuffixes --> "iface//gateway:ipsuffixes" -}}} -!! {{{network_format_ipsuffix}}} -{{{ -network_format_ipsuffix "$ip" "$suffix" --> "ip/suffix" -}}} -!! {{{network_fix_confbrs}}} -{{{ -normaliser le tableau $1(=confbrs): fusionner les doublons -}}} -!! {{{network_fix_confips}}} -{{{ -normaliser le tableau $1(=confips): fusionner les doublons, spécifier le -suffixe /24 par défaut, etc. $2 est le cas échéant l'interface associée -aux adresses ip non qualifiées -}}} -!! {{{network_fix_mainiface}}} -{{{ -A partir des valeurs des tableaux $1(=confbrs) et $2(=confips), et de -l'interface principale $3, déterminer l'interface principale. Si $3 est -spécifié, c'est la valeur sélectionnée. Sinon, si un bridge existe, c'est -le premier bridge qui est sélectionné. Sinon, la première interface est -sélectionnée. Sinon, on prend eth0. -Ensuite, réorganiser les tableaux de façon que confips[0] devienne la -configuration ip de l'interface principale. -}}} -!! {{{network_fix_confs}}} -!! {{{network_set_confbrs}}} -{{{ -initialiser $1(=confbrs) avec l'état des bridges sur le système courant -}}} -!! {{{network_set_confips}}} -{{{ -initialiser le tableau $1(=confips) avec l'état des interfaces sur le -système courant -}}} -!! {{{network_interfaces_check_confbr}}} -{{{ -Vérifier que la configuration du bridge $1, dont les membres sont les -interfaces du tableau $2(=ifaces) est faite dans le fichier -$3(=/etc/network/interfaces) -}}} -!! {{{network_interfaces_check_confip}}} -{{{ -Vérifier que la configuration de l'interface $1, avec la passerelle $2, -avec les adresses IP du tabbleau $3(=ipsuffixes) est faite dans le fichier -$4(=/etc/network/interfaces) -}}} -!! {{{network_interfaces_remove_iface}}} -{{{ -Supprimer dans le fichier $2(=/etc/network/interfaces) toute la -configuration qui concerne l'interface $1 -}}} -!! {{{network_interfaces_remove_ifaces}}} -{{{ -Supprimer dans le fichier $2(=/etc/network/interfaces) toute la -configuration qui concerne les interfaces du tableau $1=(ifaces) -}}} -!! {{{network_interfaces_remove_confbr}}} -{{{ -Supprimer dans le fichier $3(=/etc/network/interfaces) toute la -configuration qui concerne le bridge $1, et dont les interfaces sont -listées dans le tableau $2(=ifaces) -}}} -!! {{{network_interfaces_add_confip}}} -{{{ -ajouter dans le fichier $4(=/etc/network/interfaces) la configuration pour -l'interface $1, avec éventuellement la passerelle $2, et les adresses ips -telles qu'elles sont définies dans le table $3(=ipsuffixes) -}}} -!! {{{network_interfaces_add_confbr}}} -{{{ -ajouter dans le fichier $4(=/etc/network/interfaces) la configuration pour -le bridge $1, avec la liste des interfaces dans le tableau $2(=ifaces) et -la liste des configurations des adresses des interfaces dans le tableau -$3(=confips) -}}} -!! {{{network_fix_hostname}}} -!! {{{network_fix_mailname}}} -!! {{{network_fix_exim4}}} -!! {{{network_fix_postfix}}} -!! {{{network_fix_hosts}}} -!! {{{network_config}}} -{{{ -(Re)configurer le réseau sur l'hôte courant. -$1 (host) est le nom d'hôte. -$2 (confips) est le nom d'un tableau contenant la configuration des -adresses ips pour les interfaces. -$3 (confbrs) est le nom d'un tableau contenant la configuration des -bridges à créer/mettre à jour. -$4 (mainiface) est le nom de l'interface principale, c'est à dire -l'interface qui est sélectionnée si une adresse ip n'est pas préfixée de -son interface. En principe, l'interface principale est le premier bridge -défini ou la première interface définie. -$5 (reset_interfaces) spécifie de ne pas chercher à mettre à jour le -fichier /etc/network/interfaces, mais de le recréer depuis zéro. -$6 (oldhost) est le nom d'hôte actuel, avant la modification -Si un des arguments n'est pas spécifié, il est ignoré. -Le tableau confips doit contenir des définitions d'une des formes -suivantes: -[[iface][//gateway]:]address[/suffix],... -[iface:]dhcp -La deuxième forme est pour spécifier qu'une interface est configurée par -DHCP. iface vaut par défaut eth0, sauf si une définition de bridge -existe, auquel cas il s'agit du premier bridge défini. Pour chaque -interface, seule la première spécification d'adresse IP tient compte de -l'argument gateway. Les autres spécifications définissent des adresses IP -supplémentaires pour l'interface. -Le tableau brs doit contenir des définitions de la forme suivante: -br:ifaces,... -br est le nom du bridge, e.g. br0. ifaces est une liste d'interfaces -séparées par une virgule. e.g. br0:eth0,eth1 -Bien que ce soit techniquement possible, ce script interdit que l'on -définisse une adresse IP pour une interface faisant partie d'un bridge. -}}}-
!! {{{ensure_exists}}} -{{{ -Créer le fichier vide "$1" s'il n'existe pas déjà, avec les permissions -$2(=644). retourner vrai si le fichier a été créé sans erreur -}}} -!! {{{copy_replace}}} -{{{ -Copier de façon inconditionnelle le fichier $1 vers le fichier $2, en -réinitialisation les permissions à la valeur $3 -}}} -!! {{{copy_new}}} -{{{ -Copier le fichier "$1" vers le fichier "$2", avec les permissions $3(=644) -Ne pas écraser le fichier destination s'il existe déjà -Retourner vrai si le fichier a été copié sans erreur -}}} -!! {{{copy_update}}} -{{{ -Copier le fichier "$1" vers le fichier "$2", si $2 n'existe pas, ou si $1 -a été modifié par rapport à $2. Réinitialiser le cas échéant les -permissions à la valeur $3 -Retourner vrai si le fichier a été copié sans erreur. -}}} -!! {{{copy_update_ask}}} -{{{ -Copier ou mettre à jour le fichier $1 vers le fichier $2. -Si le fichier existe déjà, la différence est affichée, et une confirmation -est demandée pour l'écrasement du fichier. -Retourner vrai si le fichier a été copié sans erreur. -}}} -!! {{{copy_tree}}} -{{{ -Copier de façon inconditionnelle l'arborescence $1 dans l'arborescence $2 -}}} -!! {{{link_new}}} -{{{ -Si $2 n'existe pas, créer le lien symbolique $2 pointant vers $1 -}}}-
!! {{{get_random_kvm_macaddr}}} -{{{ -Obtenir une adresse mac au hasard commençant par 52:54:00 pour KVM -}}} -!! {{{ipcalc_splitipmask}}} -{{{ -Découper $1 de la forme ip[/mask] entre l'adresse ip, qui est placé dans -la variable $2(=ip) et le masque, qui est placée dans la variable -$3(=mask) -}}} -!! {{{ipcalc_checkip}}} -{{{ -Vérifier l'adresse ip $1 pour voir si elle est valide. Si l'adresse est -valide, l'afficher. Sinon, retourner 1 -}}} -!! {{{ipcalc_checkmask}}} -{{{ -vérifier le masque de sous-réseau $1 pour voir si elle est valide. Si oui, -afficher le suffixe (0, 8, 16, 24, 32) associé. Sinon retourner 1 -}}} -!! {{{ipcalc_netmask}}} -{{{ -à partir d'un suffixe (0, 8, 16, 24, 32) ou d'un masque de sous-réseau, -afficher le masque de sous-réseau. si le suffixe ou le masque ne sont pas -reconnus, retourner 1 -}}} -!! {{{ipcalc_broadcast}}} -{{{ -Calculer l'adresse de broadcast correspondant à l'adresse ip $1. Le masque -de sous-réseau peut-être indiqué dans l'adresse ip avec le suffixe /n ou -/x.x.x.x ou donné dans l'argument $2. Seuls les suffixes 0, 8, 16, 24, 32 -sont supportés. -Retourner 1 si un erreur s'est produite, par exemple si l'adresse ou le -suffixe sont invalides ou non supportés. -}}} -!! {{{ipcalc_gateway}}} -{{{ -Calculer l'adresse du gateway correspondant à l'adresse ip $1, en -considérant que le gateway est la première adresse du réseau. Le masque de -sous-réseau peut-être indiqué dans l'adresse ip avec le suffixe /n ou -/x.x.x.x ou donné dans l'argument $2. Seuls les suffixes 0, 8, 16, 24, 32 -sont supportés. -Retourner 1 si un erreur s'est produite, par exemple si l'adresse ou le -suffixe sont invalides ou non supportés. -}}} -!! {{{ipcalc_match}}} -{{{ -Vérifier si l'adresse $1 correspond au modèle $2, e.g.: -ipcalc_match 10.75.0.23 10/8 --> TRUE -ipcalc_match 10.75.0.23 10.75.0.0/24 --> TRUE -ipcalc_match 10.75.0.23 10.75.0.28 --> FALSE -}}} -!! {{{ipcalc_fqdn}}} -{{{ -Calculer si possible le nom pleinement qualifié correspondant à l'hôte $1. -Dans tous les cas, afficher l'hôte, mais retourner 1 si la calcul n'a pas -pu être effectué. -}}} -!! {{{ipcalc_fqdn_maybe}}} -{{{ -Si $1 *semble* déjà être un nom d'hôte pleinement qualifié, l'afficher tel -quel. Sinon utiliser ipcalc_fqdn() pour afficher le nom d'hôte pleinement -qualifié correspondant. -}}}-
!! {{{select_java}}} -{{{ -sélectionner la version *minimum* de java correspondant à $1 -$1== 1.3|1.3+|1.4|1.4+|1.5|1.5+|1.6|1.6+|1.7|1.7+|1.8|1.8+ -Si $2 est défini, il peut s'agit de 32 ou 64 selon que l'on requière la -version 32bits ou 64 bits -}}} -!! {{{select_java_exact}}} -{{{ -sélectionner la version *exacte* de java correspondant à $1 -$1== 1.3|1.4|1.5|1.6|1.7|1.8 pour une correspondance exacte -$1== 1.3+|1.4+|1.5+|1.6+|1.7+|1.8+ pour une version minimum -Si $2 est défini, il peut s'agit de 32 ou 64 selon que l'on requière la -version 32bits ou 64 bits -}}} -!! {{{select_java_any}}} -{{{ -Sélectionner la version exacte de java correspondant aux arguments, dans -l'ordre, jusqu'à ce qu'un argument corresponde. DEFAULT correspond à la -valeur actuelle de JAVA_HOME, si elle est définie. -Si aucun argument n'est défini, on assume "DEFAULT 5 6 7 8 1.4" -}}} -!! {{{get_java_version}}} -{{{ -Afficher la version de java qui installée dans $1(=$JAVA_HOME) -En cas d'erreur, ne rien afficher. -}}} -!! {{{get_default_javahome_prefix}}} -!! {{{get_javaextensions_prefix}}} -!! {{{compute_java_prefixes}}} -!! {{{recompute_java_prefixes}}} -!! {{{get_JAVA_HOME_prefix}}} -!! {{{get_JAVAEXTENSIONS_prefix}}}-
!! {{{read_property}}} -{{{ -Lire la propriété $2 dans le fichier $1, et placer la valeur dans la -variable $3. Si la propriété n'existe pas, prendre la valeur par défaut -$4. Si $3=="", elle est construite à partir de $2 en remplaçant les '.' -par '_' -Retourner 1 si une erreur s'est produite (par exemple si le fichier -n'existe pas ou n'est pas accessible en lecture) -}}} -!! {{{write_property}}} -{{{ -Ecrire la propriété $2 dans le fichier $1 avec la valeur $3. -Retourner 1 si une erreur s'est produite (par exemple si le fichier -n'existe pas ou n'est pas accessible en écriture) -}}} -!! {{{write_properties}}} -{{{ -Ecrire les propriétés $2..* dans le fichier $1. Les propriétés sont de la -forme "name=value" -}}} -!! {{{norm_properties}}} -{{{ -Normaliser un fichier de propriété: Les commentaires sont supprimés, les -valeurs sont triées par ordre alphabétique, les caractères accentués sont -remplacés par des caractères unicode \\uxxxx, les séquences unicodes sont -transformées en minuscule. -}}}-
!! {{{json_filter}}} -{{{ -traiter un flux json pour que chaque valeur soit sur une ligne séparée, -facilitant le traitement par un script bash -}}} -!! {{{awkjson}}}-
!! {{{get_default_ldapconfdir_prefix}}} -{{{ -Calculer et afficher la valeur par défaut de LDAPCONFDIR, ou une chaine -vide si l'on n'a pas pu le détecter automatiquement. -}}} -!! {{{get_default_ldapowner_prefix}}} -{{{ -Calculer et afficher la valeur par défaut de LDAPOWNER, ou une chaine -vide si l'on n'a pas pu le détecter automatiquement. -}}} -!! {{{compute_ldap_prefixes}}} -!! {{{recompute_ldap_prefixes}}} -!! {{{get_LDAPCONFDIR_prefix}}} -!! {{{get_LDAPOWNER_prefix}}} -!! {{{split_ldapuri}}} -{{{ -spliter le ldapuri $1 en $2(=proto), $3(=host) et $4(=port) -}}} -!! {{{get_suffixes}}} -{{{ -obtenir les suffixes de connexion du serveur avec l'uri $1, un par ligne -retourner 1 si la valeur n'a pas pu être obtenue -}}} -!! {{{get_anysuffix}}} -{{{ -obtenir le *premier* suffixe du serveur avec l'uri $1 -retourner 1 si la valeur n'a pas pu être obtenue -}}} -!! {{{get_dcsuffix}}} -{{{ -obtenir le *premier* suffixe du serveur avec l'uri $1 qui se termine par -dc=TLD où TLD est une valeur quelconque. A priori, c'est un suffixe d'une -base de donnée non administrative. -retourner 1 si la valeur n'a pas pu être obtenue -}}} -!! {{{get_suffix}}} -{{{ -obtenir le *premier* suffixe du serveur avec l'uri $1 qui se termine si -possible par dc=TLD où TLD est une valeur quelconque. Dans le cas normal, -le suffixe affiché est celui d'une base non administrative. -retourner 1 si la valeur n'a pas pu être obtenue -}}} -!! {{{reldn}}} -!! {{{absdn}}} -{{{ -obtenir le dn absolu correspondant au dn $1, le dn de base étant -$2(=$SUFFIX) -}}} -!! {{{subof}}} -{{{ -tester si le dn absolu $1 est $2 ou un enfant de $2 -}}} -!! {{{rabsdn}}} -{{{ -comme absdn, mais tient compte de la valeur de $3(=$SEARCHBASE) -Si le dn commence par "~/", le dn est relatif à $2(=$SUFFIX) -Si le dn commence par "/", le dn est absolu -Sinon, le dn est relatif à $3 -}}} -!! {{{pdn}}} -{{{ -corriger pour *affichage* un dn *absolu*. pour la racine "", afficher -'/'. pour $2(=$SUFFIX), afficher '~'. sinon, afficher le dn relativement à -$2 -}}} -!! {{{filter_slapdconf}}} -{{{ -Traiter un fichier de configuration slapd.conf en fusionnant les lignes -qui sont découpées. Ceci permet de faire des traitements sur le contenu. -Ce filtre s'utilisera normalement avec filter_conf, e.g.: -<slapd.conf filter_slapdconf | filter_conf >result.conf -}}}-
!! {{{def_match_attr}}} -!! {{{def_match_value}}} -!! {{{uncut_lines}}} -{{{ -reformer les lignes qui sont coupées -}}} -!! {{{cut_lines}}} -{{{ -couper les lignes trop longues -}}} -!! {{{ensure_complete_objects}}} -{{{ -S'assurer que le ldif ne contient que des objets complets (éliminant ainsi -les groupes ayant seulement dn:) -}}} -!! {{{delete_marked_objects}}} -{{{ -Supprimer les objets marqués avec --DELETE--: -}}} -!! {{{dump_ldif}}} -!! {{{tl_addattr}}} -!! {{{tl_modifyattr}}} -!! {{{tl_deleteattr}}} -!! {{{tl_deleteentry}}} -!! {{{tl_touchentry}}} -!! {{{tl_keepattr}}} -!! {{{tl_keepval}}} -!! {{{tl_excludeattr}}} -!! {{{tl_excludeval}}} -!! {{{tl_keepvalentry}}} -!! {{{tl_excludevalentry}}} -!! {{{tl_replval}}} -!! {{{tl_addval}}} -!! {{{tl_defval}}} -!! {{{print_values}}} -!! {{{tl_ensureval}}} -!! {{{print_ensure_values}}} -!! {{{tl_decode}}} -!! {{{tl_encode}}} -!! {{{tl_format}}} -!! {{{dump_headers}}} -!! {{{tl_formatcsv}}} -!! {{{tl_parsecsv}}} -!! {{{tl_parsecsvmod}}} -!! {{{get_transform_cmd}}} -{{{ -Créer une liste de commandes bash à évaluer en fonction des arguments: une -suite de commandes séparées par // -Les variables suivantes peuvent être définies en entrée: -_T_inputfile: -Si cette variable est non vide, lire à partir du fichier $_T_inputfile -au lieu de stdin -_T_uncut_before: -faut-il fusionner automatiquement les lignes *avant* de lancer les -commandes. -_T_cut_after: -faut-il découper automatiquement les lignes *après* avoir lancé les -commandes. -}}} -!! {{{transform}}}-
!! {{{file_get_vars}}} -{{{ -lire les variables dans un fichier -}}} -!! {{{file_set_vars}}} -{{{ -écrire les variables dans un fichier. Le fichier *doit exister* -}}} -!! {{{write_all_remaining_vars}}} -!! {{{file_get_properties}}} -{{{ -lire les propriétés d'un fichier de propriété java ou xml -}}} -!! {{{file_set_properties}}} -{{{ -écrire les propriétés d'un fichier de propriété java ou xml -}}} -!! {{{file_get_java_properties}}} -{{{ -lire les propriétés d'un fichier de propriétés java. note: les noms de -propriété java peuvent contenir le caractère "." mais pas les noms de -variable bash. La conversion est faite automatiquement. Par exemple:: -file_get_properties build.properties path.to.package "default value" -charge la valeur de la propriété dans la variable path_to_package -}}} -!! {{{file_set_java_properties}}} -{{{ -écrire des propriétés dans un fichier de propriétés java. -}}} -!! {{{write_all_remaining_vars}}} -!! {{{file_get_xml_properties}}} -{{{ -lire les propriétés d'un fichier de propriétés xml. Limitation: les -propriétés ne doivent pas être continuées sur plusieurs lignes. Les -propriétés doivent être écrites sous la forme:: -<propname>propvalue</propname> -}}} -!! {{{file_set_xml_properties}}} -{{{ -écrire des propriétés dans un fichier de propriétés java. -}}} -!! {{{write_all_remaining_vars}}}-
!! {{{local_shellfix}}} -{{{ -Modifier le compte local $1 pour qu'il utilise bash au lieu de sh -}}} -!! {{{local_usercheck}}} -{{{ -Vérifier si le user local $1 existe -}}} -!! {{{local_useradd}}} -{{{ -Créer le user local $1 -USAGE: local_useradd username [gecos [passwd]] -OPTIONS --s Créer l'utilisateur avec les droits d'administrateur --m Créer le home directory -}}}-
!! {{{mkcrypt}}}-
!! {{{printml}}} -!! {{{addml}}}-
!! {{{SERVICE_OVERRIDE_network_manager_stopx}}} -{{{ -désactiver network-manager avant de l'arrêter, ce qui permet de s'assurer -que chaque chaque connexion est arrêtée proprement -}}} -!! {{{SERVICE_OVERRIDE_network_manager_startx}}} -{{{ -cette fonction est le pendant de stopx: penser à relancer network-manager -après avoir démarré le service -}}}-
!! {{{random_index}}} -{{{ -Afficher un index au hasard dans le tableau $1 -}}} -!! {{{random_value}}} -{{{ -Afficher une valeur au hasard dans le tableau $1 -}}} -!! {{{random_char}}} -{{{ -Afficher un caractère au hasard dans la chaine $1 -}}} -!! {{{genpass}}} -{{{ -Générer un mot de passe au hasard avec les paramètres GENPASS_* -}}}-
!! {{{pkg_check}}} -{{{ -Vérifier que les packages sont installés sur le système -Retourner 123 si le système n'est pas supporté, et donc qu'aucune commande -d'installation de package n'est disponible. -}}} -!! {{{pkg_install}}} -{{{ -Installer les packages sans confirmation -Retourner 123 si le système n'est pas supporté, et donc qu'aucune commande -d'installation de package n'est disponible. -}}}-
!! {{{get_USER_prefix}}} -!! {{{get_HOME_prefix}}} -!! {{{has_prefix}}} -!! {{{expand_prefix}}} -!! {{{list_prefixes}}} -!! {{{dump_prefixes}}}-
!! {{{get_color}}} -!! {{{set_verbosity}}} -!! {{{set_interaction}}} -!! {{{show_error}}} -!! {{{show_warn}}} -!! {{{show_info}}} -!! {{{show_verbose}}} -!! {{{show_debug}}} -!! {{{check_verbosity}}} -!! {{{get_verbosity_option}}} -!! {{{check_interaction}}} -!! {{{is_interaction}}} -!! {{{get_interaction_option}}}-
!! {{{is_any_branch}}} -!! {{{is_master_branch}}} -!! {{{is_develop_branch}}} -!! {{{is_release_branch}}} -!! {{{is_hotfix_branch}}} -!! {{{is_feature_branch}}} -!! {{{list_release_branches}}} -!! {{{list_hotfix_branches}}} -!! {{{list_feature_branches}}} -!! {{{pver}}}-
!! {{{pkg_check}}} -{{{ -Vérifier que les packages sont installés sur le système -}}} -!! {{{pkg_update}}} -{{{ -Mettre à jour la liste des packages silencieusement sans confirmation -}}} -!! {{{pkg_upgrade}}} -{{{ -Mettre à jour la liste des packages silencieusement sans confirmation -}}} -!! {{{pkg_install}}} -{{{ -Installer les packages silencieusement et sans confirmation -}}} -!! {{{pkg_installm}}} -{{{ -Installer les packages silencieusement et sans confirmation -Retourner 0 si au moins un des packages a été installé. Sinon, les -packages n'ont pas été instllés, soit parce qu'ils sont déjà installé, -soit parce qu'il y a eu une erreur. -}}} -!! {{{service_disable}}} -{{{ -Désactiver le service $1 pour qu'il ne se lance pas automatiquement au -démarrage -}}} -!! {{{service_enable}}} -{{{ -Activer le service $1 pour qu'il se lance automatiquement au démarrage -}}} -!! {{{create_bridge}}} -{{{ -Créer un nouveau pont nommé $1 avec les paramètres $2 -}}}-
!! {{{runs_initdir}}} -{{{ -Initialiser le répertoire d'hôte. $1 est un nom d'hôte pleinement -qualifié, et les fichiers sont créés dans le premier répertoire de -RUNSHOSTSDIRS qui convient: si un fichier .udir existe avec un tableau -runs_domains qui contient le domaine de l'hôte spécifié, alors c'est ce -répertoire qui est sélectionné. Sinon, on prend le premier répertoire de -RUNSHOSTSDIRS. -$2 spécifie si le fichier doit être créé avec de l'aide (yes) ou avec le -script minimum (no) -$3 est le contenu à placer dans le fichier sysinfos.conf, s'il n'a pas -déjà été provisionné. -Il faut lancer __runs_setpath avant d'utiliser cette fonction et -RUNSHOSTDIRS ne doit pas être vide -}}} -!! {{{runs_create_rscript}}} -{{{ -Créer un modèle de script. Si $2 est spécifié, c'est un nom d'hôte -pleinement qualifié. Le répertoire d'hôte correspondant *doit* exister. -$3 spécifie si le fichier doit être créé avec de l'aide (yes) ou avec le -script minimum (no) -Si $2!="", il faut lancer __runs_setpath avant d'utiliser cette fonction -et RUNSHOSTDIRS ne doit pas être vide -Le chemin du nouveau script est ajouté au tableau new_rscripts -}}} -!! {{{runs_unsupported_system}}} -{{{ -Afficher un message d'erreur indiquant que le système actuel n'est pas -supporté, et quitter le script -}}} -!! {{{runs_require_sysinfos}}} -{{{ -Vérifier le système actuel avec check_sysinfos(), et afficher un message -d'erreur avec runs_unsupported_system() s'il ne correspond pas à la -requête -}}} -!! {{{runs_find_host}}} -!! {{{runs_add_domain}}} -{{{ -Si $1 est nom d'hôte pleinement qualifié, retourner cette valeur -Sinon, lui rajouter le domaine RUNSDOMAIN -}}} -!! {{{runs_find_hostfile}}} -{{{ -Trouver et afficher le fichier d'hôte $1 dans les répertoires du tableau -$3(=RUNSHOSTSDIRS), pour l'hôte $2(=$RUNSHOST). Retourner 0 en cas de -succès, 1 en cas d'échec. -Si host=$2 est une valeur non vide, la recherche est effectuée dans -{$RUNSHOSTSDIRS}/$host et {$RUNSHOSTSDIRS}/$domain/$hostname. Sinon, -retourner 1, car il faut spécifier un nom d'hôte. -}}} -!! {{{runs_find_datafile}}} -{{{ -Trouver et afficher le fichier de données $1 dans le répertoire $3 s'il -est non vide puis dans les répertoires des tableaux $4(=RUNSSCRIPTSDIRS), -$5(=RUNSMODULESDIRS) et $6(=RUNSHOSTSDIRS), pour l'hôte -$2(=$RUNSHOST). Retourner 0 en cas de succès, 1 en cas d'échec. -- D'abord, si $1 *n'est pas* de la forme "./path" ou "../path", chercher -dans $3. -- Puis si l'hôte est spécifié, chercher dans {$RUNSHOSTSDIRS}/$host et -{$RUNSHOSTSDIRS}/$domain/$hostname. -- Puis chercher dans {$RUNSSCRIPTSDIRS} puis {$RUNSMODULESDIRS}. -- Puis, si $1 est de la forme "./path" ou "../path", chercher dans $3. -- Sinon, retourner 1 -}}} -!! {{{runs_initvars}}} -{{{ -Initialiser les variables RUNSDIR, RUNSSCRIPT, RUNSDIRPATH, -RUNSSCRIPTPATH, RUNSSCRIPTDIR et RUNSSCRIPTNAME pour le script $1. -Les valeurs sont initialisées comme suit: -RUNSSCRIPT="$(abspath "$1")" -RUNSDIR="$2" (le répertoire de $RUNS*PATH dans lequel a été trouvé le -script) -Si $3!="", RUNSDIRPATH="$3" et RUNSSCRIPTPATH="$4" -Sinon, RUNSDIRPATH="$RUNSSCRIPTDIR" et RUNSSCRIPTPATH="$RUNSSCRIPTNAME" -}}} -!! {{{runs_find_scriptfile}}} -{{{ -Trouver sans l'afficher le script $1 dans les répertoires des tableaux -$3(=RUNSSCRIPTSDIRS), $4(=RUNSMODULESDIRS) et $5(=RUNSHOSTSDIRS), en -considérant que le script sera lancé sur l'hôte $2(=$RUNSHOST), et -initialiser les variables RUNSDIR, RUNSSCRIPT, RUNSSCRIPTDIR, -RUNSSCRIPTNAME, RUNSDIRPATH et RUNSSCRIPTPATH. Retourner 0 en cas de -succès, 1 en cas d'échec. -$6 vaut ".rs" par défaut est c'est une extension à rajouter au nom -spécifié si le fichier sans l'extension n'existe pas -RUNSDIR est le répertoire dans lequel a été trouvé le script (parmi les -valeurs fournies dans les tableaux RUNSSCRIPTSDIRS, RUNSMODULESDIRS, -RUNSHOSTSDIRS), RUNSDIRPATH est le répertoire à partir duquel est exprimé -le chemin du script (i.e RUNSDIRPATH + RUNSSCRIPTPATH == RUNSSCRIPT), -RUNSSCRIPT contient le chemin absolu vers le script, RUNSSCRIPTPATH -contient le chemin du script dans RUNSDIRPATH, RUNSSCRIPTDIR le répertoire -du script, et RUNSSCRIPTNAME le nom du script. -D'abord, si l'hôte est spécifié, chercher dans {$RUNSHOSTSDIRS}/$host et -{$RUNSHOSTSDIRS}/$domain/$hostname. Puis chercher dans {$RUNSSCRIPTSDIRS} -}}} -!! {{{runs_find_scriptfile_reverse}}} -{{{ -Soit le fichier de script $1, exprimée de façon absolue, trouver le -fichier parmi les tableaux $3(=RUNSSCRIPTSDIRS), $4(=RUNSMODULESDIRS) -et $5(=RUNSHOSTSDIRS), en considérant que le script sera lancé sur l'hôte -$2(=$RUNSHOST), puis initialiser les variables RUNSDIR, RUNSSCRIPT, -RUNSSCRIPTDIR, RUNSSCRIPTNAME, RUNSDIRPATH et RUNSSCRIPTPATH. Retourner 0 -en cas de succès, 1 en cas d'échec. -}}} -!! {{{runs_rscript}}} -{{{ -Lancer le fichier $1 comme un script avec les arguments $2..$*. Retourner -la valeur de retour du script. -}}} -!! {{{runs_recipe}}} -{{{ -Lancer les scripts de la recette contenue dans le fichier $1. Arrêter au -premier script qui est en erreur -}}} -!! {{{runs_rscriptpath}}} -{{{ -Lancer le script $1 avec les arguments $2..$*. Le script est cherché dans -les répertoires de RUNSSCRIPTSPATH. Retourner 123 si le script n'est pas -trouvé, sinon retourner la valeur de retour du script. -}}} -!! {{{runs_recipepath}}} -{{{ -Lancer la recette $1. Le fichier de recette est cherché dans les -répertoires de RUNSSCRIPTSPATH. Retourner 123 si le fichier de recette n'a -pas été trouvé, sinon retourner la valeur de retour de runs_recipe() -}}} -!! {{{runs_init}}} -!! {{{runs_initdomains}}} -{{{ -Si ce n'est pas déjà le cas, initialiser RUNSDOMAINS en fonction de -/etc/resolv.conf -}}} -!! {{{runs_inithost}}} -!! {{{runs_initsysinfos}}} -!! {{{runs_initworkdir}}} -!! {{{runs_after_export}}} -{{{ -après l'export, initialiser varsfile avec les valeurs qu'il faut garder -entre le déploiement local et le déploiement distant. -}}} -!! {{{runs_check_runsscript}}} -!! {{{runs_var}}} -{{{ -Initialiser les variables selon les directives données en ligne de -commande. -Les arguments peuvent être une suite de définitions de la forme -'scalar=value', 'scalar!=name', 'array+=value', 'array-=value' ou -'array@=name'. -Sinon, le *dernier* argument peut-être de l'une des formes suivantes: -'array value0 [value1...]' pour initialiser un tableau, -'array+ value0 [value1...]' pour ajouter des valeurs à un tableau, -'array- value0 [value1...]' pour enlever des valeurs à un tableau. -Les formes 'scalar!=value' et 'array@=value' sont des indirections et -permettent d'initialiser la variable avec la valeur d'une autre -variable. L'avantage est que la résolution de la valeur est faite -uniquement lors de l'appel de cette fonction, ce qui est utile avec des -fonction comme 'after -r' -}}} -!! {{{runs_conf}}} -{{{ -Activer les flags $* -}}} -!! {{{runs_indref}}} -{{{ -fonction de convenance pour créer des références $3..* avec le fichier de -configuration $1 et les variables $2 -}}} -!! {{{runs_refcerts}}} -{{{ -fonction de convenance pour créer une référence à un répertoire contenant -des certificats mentionnés dans le fichier de configuration $1. Si les -références $2..* ne sont pas mentionnées, la variable certsdir dans le -fichier de configuration est utilisée. -}}} -!! {{{runs_refapacheconfig}}} -{{{ -fonction de convenance pour créer les références à un répertoire de -configuration pour apache. -USAGE: refapacheconfig autoconfdir=path/to/autoconfdir [certsdir=[path/to/certsdir]] -- autoconfdir= est requis et permet de définir à la fois la variable qui -contiendra la référence ainsi que le répertoire à référencer. -- certsdir= est optionel. Si cet argument est spécifié sous la forme -certsdir=path/to/certsdir, il permet de définir à la fois la variable qui -contiendra la référence ainsi que le répertoire à référencer. Si -l'argument est spécifié sous la forme certsdir=, il permet de définir la -variable qui contiendra la référence. C'est cette variable qui sera lue -dans les fichiers de configuration. Si l'argument n'est pas spécifié, on -considère que l'argument 'certsdir=' a été utilisé. -}}} -!! {{{runs_set_lang}}} -{{{ -Charger la valeur de LANG depuis l'environnement. La variable LANG est -initialisée -}}} -!! {{{runs_set_proxy}}} -{{{ -Charger la valeur du proxy depuis l'environnement. Les variables -http_proxy, ftp_proxy et no_proxy sont initialisées -}}} -!! {{{runs_check_confs}}} -{{{ -Vérifier l'état courant par rapport aux flags -}}} -!! {{{runs_after}}} -{{{ -Vérifier que ce script est lancé après le scriptpath $1, par rapport à -RUNSSTORY -}}} -!! {{{runs_clvars}}} -{{{ -Traiter les spécifications de variables données en ligne de commande ou -dans un fichier de recettes -}}} -!! {{{runs_indvars}}} -{{{ -Résoudre les valeurs effectives des variables qui sont des indirections -}}} -!! {{{runs_clvars_cmd}}} -{{{ -écrire la ligne de recette correspondant au script $1 et aux variables -$2..$* -}}} -!! {{{runs_loadconfs}}} -!! {{{runs_clearvars}}} -!! {{{runs_action_desc}}} -!! {{{runs_action_dump}}} -!! {{{runs_action_run}}} -!! {{{runs_action_export}}} -!! {{{shouldrun}}} -!! {{{checkdone}}} -!! {{{requiredone}}} -!! {{{setdone}}} -!! {{{resetdone}}}-
!! {{{runsmod_checkenv}}} -{{{ -vérifier l'environement. créer les répertoires nécessaires. -}}} -!! {{{runsmod_should_update_repolists}}} -{{{ -tester s'il faut mettre à jour au moins un des fichiers contenant les -listes des dépôts -}}} -!! {{{runsmod_update_repolists}}} -{{{ -mettre à jour si nécessaire les fichiers contenant les listes des dépôts. -Si $1 n'est pas vide, forcer la mise à jour de tous les fichiers -}}} -!! {{{runsmod_setup_vars}}} -{{{ -récupérer configuration statique pour la mettre à jour -}}} -!! {{{runsmod_clone_or_pull}}} -{{{ -Chercher les modules $3..@, pour l'hôte $1 qui est le mode d'hôte: none, -all, self ou one pour un hôte spécifique $2. Ajouter les chemins dans le -tableau REPO_DIRS. Mettre à jour les tableaux SCRIPTS_DIRS, MODULES_DIRS -et HOSTS_DIRS -}}} -!! {{{runsmod_teardown_vars}}}-
!! {{{semver_parse}}} -!! {{{semver_incmajor}}} -!! {{{semver_incminor}}} -!! {{{semver_incpatchlevel}}} -!! {{{semver_setversion}}} -!! {{{semver_setprelease}}} -!! {{{semver_compare_prelease}}} -!! {{{semver_setmetadata}}} -!! {{{semver_addmetadata}}} -!! {{{semver_compare_metadata}}} -{{{ -même algo que pour prelease -}}} -!! {{{semver_copy}}} -!! {{{semver_build}}} -!! {{{semver_setvar}}} -!! {{{psemver_parse}}} -!! {{{psemver_incmajor}}} -!! {{{psemver_incminor}}} -!! {{{psemver_incpatchlevel}}} -!! {{{psemver_setversion}}} -!! {{{psemver_setprelease}}} -!! {{{psemver_compare_prelease}}} -!! {{{psemver_setmetadata}}} -!! {{{psemver_addmetadata}}} -!! {{{psemver_compare_metadata}}} -!! {{{psemver_copy}}} -!! {{{psemver_build}}} -!! {{{psemver_setvar}}}-
!! {{{service}}} -!! {{{service_start}}} -{{{ -démarrer le service $1 de façon inconditionnelle -}}} -!! {{{service_startm}}} -{{{ -démarrer le service $1 s'il n'est pas déjà démarré -}}} -!! {{{service_stop}}} -{{{ -arrêter le service $1 de façon inconditionnelle -}}} -!! {{{service_stopm}}} -{{{ -arrêter le service $1 s'il n'est pas déjà arrêté -}}} -!! {{{service_reload}}} -{{{ -recharger le service $1 -}}} -!! {{{service_status}}} -{{{ -tester/afficher le status du service $1 -}}}-
!! {{{read_data}}} -!! {{{dump_data}}} -!! {{{compute_local_sysinfos}}} -!! {{{compute_remote_sysinfos}}} -!! {{{ensure_sysinfos}}} -{{{ -Essayer de déterminer les valeurs des variables $1(=SYSNAME), $2(=SYSDIST) -et $3(=SYSVER) en fonction des valeurs des autres. Cette fonction est à -utiliser quand on récupère cette information de la part de l'utilisateur, -et qu'il faut compléter -}}} -!! {{{get_sysinfos_desc}}} -{{{ -Afficher une chaine de la forme SYSNAME/SYSDIST/SYSVER qui décrit le -système actuel -}}} -!! {{{check_sysinfos}}} -{{{ -Tester si le système courant ($MYSYSNAME, $MYSYSDIST, $MYSYSVER, $MYBITS) -correspond à au moins un des arguments. -Il est possible de spécifier des variables différentes pour tester le -système courant avec l'option --vars qui doit être spécifiée en premier: -check_sysinfos --vars sysname sysdist sysver bits -d debian -Les options -s, -d, -v, -b permettent respectivement de vérifier le -système, la distribution, la version et le nombre de bits. Il est possible -de spécifier plusieurs tests à effectuer, e.g.: -check_sysinfos -d debian ubuntu -b 64 -pour tester si l'on est sur une distribution debian ou ubuntu *et* sur un -système 64 bits -Note: avec l'option --vars, il peut arriver que sysname, sysdist ou sysver -ne soient pas des tableaux mais des variables scalaires, surtout si elles -sont fournies par l'utilisateur. Il est conseillé dans ce cas de tester -toutes les possibilités quand on vérifie une valeur, e.g.: -check_sysinfos --vars sysname sysdist sysver bits -s linux64 linux32 linux -pour tester si on est sur un système linux -Avec l'option -v, il est possible de suffixer la valeur avec + ou - selon -que l'on veut toutes les versions situées après ou avant la version -spécifiée. Attention, à cause d'une limitation de l'implémentation, il -faut alors impérativement filtrer aussi sur la distribution, e.g: -check_sysinfo -d debian -v lenny+ -pour tester si on est en lenny ou en squeeze. -De même, l'option -d accepte aussi de suffixer la valeur avec + ou -, mais -cela n'a actuellement de sens qu'avec les version de MacOS X. Il faut -aussi impérativement filtrer sur le système, e.g: -check_sysinfos -s macosx -d 10.5+ -}}} -!! {{{on_debian}}} -{{{ -Tester si on est sur debian. charger le module debian si c'est le cas. -Si une commande $1..@ est spécifiée, la lancer, mais il n'est alors plus -possible de lancer des tests plus spécifiques avec __on_debian() -}}} -!! {{{on_debian:}}} -!! {{{on_stretch}}} -!! {{{on_jessie}}} -!! {{{on_wheezy}}} -!! {{{on_squeeze}}} -!! {{{on_default}}}-
!! {{{template_list}}} -{{{ -Soit $N le séparateur --, lister les fichiers des répertoires sources -$2..$(N-1) qui seraient fusionnés avec template_merge() ou supprimés avec -template_unmerge() du répertoire destination $1. Si des chemins sont spécifiés -avec les arguments $(N+1)..@, ne traiter que les fichiers qui correspondent à -ces spécifications. Exemple: -template_list destdir srcdirs... -- specs... -}}} -!! {{{template_merge}}} -{{{ -Soit $N le séparateur --, copier dans le répertoire destination $1 les -fichiers des répertoires sources $2..$(N-1) correspondant aux spécifications -$(N+1)..@, si ces fichiers n'ont pas été modifiés dans le répertoire de -destination. -Les fichiers sources ayant l'extension .template sont ignorés par défaut, sauf -s'ils sonts demandés explicitement. Exemple: -template_merge destdir srcdirs... -- specs... -}}} -!! {{{template_unmerge}}} -{{{ -Soit $N le séparateur --, supprimer du répertoire destination $1 les fichiers -provenant des répertoires sources $2..$(N-1) et qui n'ont pas été modifiés. Si -des chemins sont spécifiés avec les arguments $(N+1)..@, ne traiter que les -fichiers qui correspondent à ces spécifications. Exemple: -template_unmerge destdir srcdirs... -- specs... -}}} -!! {{{template_cleandest}}} -{{{ -Supprimer dans le répertoire de destination $1 tous les répertoires vides. -Cette fonction est habituellement utilisée après template_unmerge() -Ignorer les chemins qui contiennent .git/ et .svn/ -}}} -!! {{{template_diff}}} -{{{ -Afficher les différences entre les fichiers du répertoire de destination $1 et -les fichiers des répertoires sources $2..@ -}}} -!! {{{template_srcdir}}} -{{{ -Obtenir le chemin vers le répertoire source de templates $1, situé dans -ULIBDIR/templates -}}} -!! {{{templatectl_config}}} -{{{ -Obtenir le chemin vers le fichier de configuration pour le répertoire $1 -Si $2==nohideconfig, utiliser le nom CONFIG.conf, sinon utiliser par défaut -.CONFIG sauf si le fichier CONFIG.conf existe -}}} -!! {{{templatectl_loadvars}}} -{{{ -Charger les valeurs des variables depuis le fichier $1 -Les variables suivantes doivent être définies: -- Le tableau TEMPLATECTL_DEFAULTS permet de donner une valeur par défaut aux -variables mentionnées dans TEMPLATE_STATIC_VARS. C'est une liste de valeurs -de la forme 'name=value' -- Le tableau TEMPLATECTL_VARS contient des variables supplémentaires -spécifiées par l'utilisateur. C'est une liste de valeurs de la forme -'name=value' -- TEMPLATE_STATIC_VARS doit contenir une liste de noms de variables qui -peuvent être remplacés dans les fichiers de template. -- TEMPLATE_DYNAMIC_VARS contient une liste de noms de variables valides, mais -qui ne doivent pas être remplacés, en effet, ils sont utilisés pour le -déploiement des fichiers. -- TEMPLATE_NOWRITE_VARS contient une liste de noms de variables qui ne -devraient pas être écrits dans le fichier des variables, sauf si elles -reçoivent une valeur explicite de la part de l'utilisateur. Ce tableau est -mis à jour lors de l'analyse du tableau TEMPLATECTL_VARS -}}} -!! {{{templatectl_writevars}}} -{{{ -Ecrire les variables dans le fichier $1 -}}} -!! {{{templatectl_list_vars}}} -{{{ -Afficher les valeurs des variables -}}} -!! {{{templatectl}}} -{{{ -Fonction de haut niveau qui facilite l'utilisation des fonctions template_* -définir la fonction __display_templatectl_help() pour l'affichage de l'aide -- Le tableau TEMPLATECTL_SRCDIRS doit contenir la liste des répertoires -sources pour les templates. Alternativement, il est possible de définir la -variable TEMPLATECTL_SRCDIR s'il n'y a qu'un seul répertoire source pour le -template -- TEMPLATECTL_CONFIG est le nom de base du fichier à partir duquel sont -chargées les variables et dans lequel sont écrites les variables avec -l'option --write-vars -Si le nom de base est CONFIG, le fichier s'appelera .CONFIG si l'option ---hide-config est utilisée (par défaut) ou CONFIG.conf si l'option ---no-hide-config est utilisée -Les variables de template_loadvars() sont aussi prises en compte -}}}-
!! {{{twget_version}}} -{{{ -lire le numéro de version dans le fichier $1 -}}} -!! {{{twdump_header}}} -{{{ -lire et afficher le contenu avant-storeArea du tiddlywiki $1 -}}} -!! {{{twdump_footer}}} -{{{ -lire et afficher le contenu après-storeArea du tiddlywiki $1 -}}} -!! {{{twdump_storeArea}}} -{{{ -lire et afficher le storeArea dans le tiddlywiki $1 -}}} -!! {{{twreplace_storeArea}}} -{{{ -dans le tiddlywiki $1, remplacer le storeArea par le fichier $2 (par défaut, lu sur stdin) -}}} -!! {{{twupgrade}}} -{{{ -mettre à jour le tiddlywiki $1 sur la base du tiddlywiki plus récent $2 -}}} -!! {{{twdate_curtwp}}} -{{{ -obtenir la date courante dans le format "dd/mm/YYYY HH:MM" exprimée dans -l'heure locale -$1 est éventuellement la date exprimée en nombre de secondes depuis -l'epoch, exprimée dans l'heure locale -}}} -!! {{{twdate_tid2twp}}} -{{{ -Transformer $1, une date de la forme "YYYYmmddHHMM" exprimée dans le -timezone UTC en une chaine "dd/mm/YYYY HH:MM" exprimée dans l'heure locale -Si $1 n'est pas dans le bon format, ne rien afficher -}}} -!! {{{twdate_curtid}}} -{{{ -obtenir la date courante dans le format "YYYYmmddHHMM" exprimée dans le -timezone UTC -$1 est éventuellement la date exprimée en nombre de secondes depuis -l'epoch, exprimée dans l'heure locale -}}} -!! {{{twdate_twp2tid}}} -{{{ -Transformer $1, une date de la forme "dd/mm/YYYY HH:MM" exprimée en heure -locale en une chaine "YYYYmmddHHMM" exprimée dans le timezone UTC -Si $1 n'est pas dans le bon format, ne rien afficher -}}} -!! {{{twdump_tiddlers}}} -{{{ -dumper les tiddlers du fichier $1 généré avec twdump_storeArea() sous -forme d'une liste d'appel de fonction '__tiddler_data title creator -modifier created modified tags changecount content' -Les arguments de la fonction sont les valeurs brutes du tiddler, qui ont -simplement été corrigées avec unquote_html() -}}} -!! {{{dump_tiddler}}} -!! {{{twdump_twpage}}} -{{{ -Dumper le contenu de la twpage $1 sous forme d'un appel à une function -'__twpage_data title creator modifier created modified tags changecount -content' -Les arguments de la fonction sont les valeurs brutes de la twpage, sauf -que le champ modified contient toujours la date de dernière modification -du fichier. -}}} -!! {{{twwrite_tiddler}}} -{{{ -Ecrire sur STDOUT le tiddler correspondant aux paramètres sont spécifiés -sur la ligne de commande. Les arguments sont les valeurs brutes prises de -la twpage, telles qu'elles sont générées par twdump_twpage() -}}} -!! {{{twcheck_twpage_modified}}} -{{{ -Vérifier si la twpage $1 peut être écrasée par un tiddler dont la date de -modification est $2, de format "YYYYmmddHHMM" exprimée dans le timezone -UTC -C'est le cas si le fichier $1 n'existe pas, ou a une date de modification -antérieure à $2 -}}} -!! {{{twcheck_twpage_newtwpage}}} -{{{ -Vérifier si la twpage $1 peut être écrasée par la twpage $2 -C'est le cas si le fichier $1 n'existe pas, ou a une date de modification -antérieure à $2 -}}} -!! {{{twwrite_twpage}}} -{{{ -Ecrire dans le répertoire courant le fichier correspondant au tiddler dont -les paramètres sont spécifiés sur la ligne de commande. Les arguments sont -les valeurs brutes prises du tiddler, telles qu'elles sont générées par -twdump_tiddlers() -Retourner 0 si le fichier a été écrasé, 1 s'il n'a pas été écrasé parce -qu'il n'a pas été modifié, 2 s'il n'a pas été écrasé parce qu'il est plus -récent. -Si TW_VERBOSE=1, afficher un message informatif lors de l'export -}}} -!! {{{export_to_twpages}}} -{{{ -Exporter tous les tiddlers du tiddlywiki $1 dans le répertoire $2 -}}} -!! {{{import_from_twpages}}} -{{{ -Remplacer les tiddlers du tiddlywiki $1 par les twpages du répertoire $2 -}}}-
!! {{{udir_check}}} -{{{ -Vérifier si le fichier $1 existe -Si $1 est un répertoire, prendre $1/.udir -}}} -!! {{{udir_create_maybe}}} -{{{ -Si le fichier $1 n'existe pas, le créer comme un template .udir -Si $1 est un répertoire, prendre $1/.udir -}}} -!! {{{udir_dump}}} -{{{ -Dumper toutes les variables définies pour le fichier $1 -Si $1 est un répertoire, prendre $1/.udir -}}} -!! {{{udir_eval}}} -{{{ -Evaluer la commande "$2..$*" dans le contexte des variables définies pour -le répertoire $1. La commande est évaluée dans un sous-shell pour ne pas -polluer l'espace de noms courant. -}}} -!! {{{udir_dump_all}}} -{{{ -Dumper toutes les variables définies pour le répertoire $1 et *tous ses -parents* jusqu'à la racine -}}} -!! {{{udir_eval_all}}} -{{{ -Evaluer la commande "$2..$*" dans le contexte des variables définies pour -le répertoire $1 et *tous ses parents* jusqu'à la racine -}}} -!! {{{udir_parse}}} -{{{ -Dans le fichier $1, lire les noms des variables -Si $1 est un répertoire, prendre $1/.udir -Les noms des variables sont placés dans le tableau $2(=UDIR_VARS), et les noms -des tableaux sont placés dans le tableau $3(=UDIR_ARRAYS) -note: les regex qui sont entre "" au lieu de // le sont à cause d'un bug -de awk sous macosx -}}} -!! {{{udir_update}}} -{{{ -Dans le fichier $1, mettre à jour les variables $2..* -Si $1 est un répertoire, prendre $1/.udir -Chaque argument de cette fonction est de la forme name[=value] -Si value n'est pas précisée, la variable obtient une valeur nulle -(i.e. var=) -Si la variable ne figure pas dans le fichier, elle est rajoutée à la fin -du fichier. -Cette fonction nécessite gawk. -}}} -!! {{{write_unseen}}} -!! {{{udir_edit}}}-
!! {{{uenv_update_dir}}} -{{{ -Mettre à jour l'ordre de chargement pour le répertoire $1 qui contient des -fichiers de profil pour le shell. L'ordre dans lequel le fichiers de -profil doivent être chargé est écrit dans le fichier $1/.source_in_order -Si $2 est spécifié, il s'agit d'un fichier temporaire utilisé pour les -calculs de l'ordre des chargements. -$3(=$1) est le répertoire de destination. Si $1 est un répertoire de -préparation temporaire, on peut spécifier grâce à $3 quel est le -répertoire final après préparation. -S'ils sont spécifiés, les arguments $4..* sont des répertoires contenant -des fichiers de profils supplémentaires qu'il faut considérer aussi. Dans -ce cas, $3 est ignoré. -}}} -!! {{{uenv_set_destdirs}}} -!! {{{uenv_sourced_in}}} -{{{ -vérifier que l'un des fichiers $2..$* est sourcé dans $1 -}}} -!! {{{uenv_configure_profiles}}} -!! {{{uenv_install_profiles}}}-
!! {{{uinc}}}-
!! {{{uinst}}} -{{{ -lancer uinst en déclarant les variables locales, de façon à ne pas polluer -l'environnement de l'appelant. -}}} -!! {{{uinst_nolocal}}} -{{{ -Interface en mode ligne de commande pour uinst. Appeler cette fonction -avec les paramètres de la ligne de commande, e.g.: -uinst_nolocal "$@" -}}}-
!! {{{eerror}}} -!! {{{die}}} -!! {{{uprovided}}} -{{{ -Tester si le module $1 a déjà été chargé par urequire -}}} -!! {{{uprovide}}} -{{{ -Spécifier que le module $1 a été sourcée, ou prétendre que c'est le cas. -Retourner 1 si le module était déjà pourvu, 0 si c'est la première fois -qu'on le pourvoit -}}} -!! {{{urequire}}} -{{{ -Sourcer un module recherché dans ULIBDIRS -Le module DEFAULTS est traité de façon particulière: si le fichier associé -n'est pas trouvé, charger base, pretty, sysinfos et compat à la place -Si un module n'est pas trouvé, quitter le script avec die() -}}} -!! {{{ulibadd}}} -{{{ -Ajouter $1 au chemin de recherche de urequire -}}} -!! {{{ulibsync}}} -{{{ -Synchroniser les modules de ulib dans le répertoire $1 -}}} -!! {{{ulibver}}} -{{{ -Vérifier que la version actuelle de ulib est au moins à la version $1 -(inclue) et éventuellement au plus à la version $2 (exclue) -}}} -!! {{{ulibver_require}}}-
!! {{{eerror}}} -!! {{{die}}} -!! {{{uprovided}}} -!! {{{uprovide}}} -!! {{{urequire}}} -!! {{{ulibadd}}} -!! {{{ulibsync}}} -!! {{{ulibver}}} -!! {{{ulibver_require}}}-
!! {{{vcs_getvcs_help}}} -!! {{{vcs_getvcs}}} -!! {{{vcs_getroot_help}}} -!! {{{vcs_getroot}}} -!! {{{vcs_getrepos_help}}} -!! {{{vcs_getrepos}}} -!! {{{vcs_geturl_help}}} -!! {{{vcs_geturl}}} -!! {{{vcs_vcs_help}}} -!! {{{vcs_vcs}}} -!! {{{vcs_add_help}}} -!! {{{vcs_add}}} -{{{ -le répertoire de référence est le répertoire du premier fichier ajouté -}}} -!! {{{vcs_remove_help}}} -!! {{{vcs_remove}}} -{{{ -le répertoire de référence est le répertoire du premier fichier supprimé -}}} -!! {{{vcs_copy_help}}} -!! {{{vcs_copy}}} -{{{ -le répertoire de référence est le répertoire de destination -}}} -!! {{{vcs_move_help}}} -!! {{{vcs_move}}} -{{{ -le répertoire de référence est le répertoire de destination -}}} -!! {{{vcs_mkdir_help}}} -!! {{{vcs_mkdir}}} -{{{ -le répertoire de référence est le répertoire du premier répertoire créé -}}} -!! {{{vcs_commit_help}}} -!! {{{vcs_commit}}} -!! {{{vcs_status_help}}} -!! {{{vcs_status}}} -!! {{{vcs_update_help}}} -!! {{{vcs_update}}} -!! {{{vcs_push_help}}} -!! {{{vcs_push}}} -!! {{{vcs_diff_help}}} -!! {{{vcs_diff}}} -!! {{{vcs_tag_help}}} -!! {{{vcs_tag}}} -!! {{{git_getrepos}}} -!! {{{git_geturl}}} -!! {{{git_have_annex}}} -!! {{{git_add}}} -!! {{{git_remove}}} -!! {{{git_copy}}} -!! {{{git_move}}} -!! {{{git_mkdir}}} -!! {{{git_commit}}} -!! {{{git_status}}} -!! {{{git_update}}} -!! {{{git_push}}} -!! {{{git_diff}}} -!! {{{git_tag}}} -!! {{{git_check_gitvcs}}} -!! {{{git_ensure_gitvcs}}} -!! {{{git_list_branches}}} -!! {{{git_list_rbranches}}} -!! {{{git_list_pbranches}}} -{{{ -lister les branches locales et celles qui existent dans l'origine -$1(=origin) et qui pourraient devenir une branche locale avec la commande -git checkout -b -}}} -!! {{{git_have_branch}}} -!! {{{git_have_rbranch}}} -!! {{{git_get_branch}}} -!! {{{git_get_branch_remote}}} -!! {{{git_get_branch_merge}}} -!! {{{git_get_branch_rbranch}}} -!! {{{git_is_branch}}} -!! {{{git_have_remote}}} -!! {{{git_track_branch}}} -!! {{{git_ensure_branch}}} -{{{ -retourner 0 si la branche a été créée, 1 si elle existait déjà, 2 en cas d'erreur -}}} -!! {{{git_check_cleancheckout}}} -{{{ -vérifier qu'il n'y a pas de modification locales dans le dépôt -correspondant au répertoire courant. -}}} -!! {{{git_ensure_cleancheckout}}} -!! {{{git_is_ancestor}}} -{{{ -vérifier que la branche $1 est un ancêtre direct de la branche $2, qui -vaut par défaut refs/remotes/${3:-origin}/$1 -note: cette fonction retourne vrai si $1 et $2 identifient le même commit -}}} -!! {{{git_should_ff}}} -{{{ -vérifier si la branche $1 devrait être fast-forwardée à partir de la -branche d'origine $2, qui vaut par défaut refs/remotes/${3:-origin}/$1 -note: cette fonction est similaire à git_is_ancestor(), mais retourne -false si $1 et $2 identifient le même commit -}}} -!! {{{git_should_push}}} -{{{ -vérifier si la branche $1 devrait être poussée vers la branche de même nom -dans l'origine $2(=origin), parce que l'origin peut-être fast-forwardée à -partir de cette branche. -}}} -!! {{{git_fast_forward}}} -{{{ -vérifier que la branche courante est bien $1, puis tester s'il faut la -fast-forwarder à partir de la branche d'origine $2, puis le faire si c'est -nécessaire. la branche d'origine $2 vaut par défaut refs/remotes/origin/$1 -}}} -!! {{{git_is_merged}}} -{{{ -vérifier que les branches $1 et $2 ont un ancêtre commun, et que la -branche $1 a été complètement fusionnée dans la branche destination $2 -}}} -!! {{{git_annex_initial}}} -{{{ -sur le dépôt $1 fraichement cloné, vérifier s'il faut faire git annex -init. Si oui, l'initialiser avec le nom d'hôte, et récupérer tous les -fichiers annexés -retourner 1 si une erreur s'est produite -}}} -!! {{{svn_getrepos}}} -!! {{{svn_geturl}}} -!! {{{svn_add}}} -!! {{{svn_remove}}} -!! {{{svn_copy}}} -!! {{{svn_move}}} -!! {{{svn_mkdir}}} -!! {{{svn_commit}}} -!! {{{svn_status}}} -!! {{{svn_update}}} -!! {{{svn_push}}} -!! {{{svn_diff}}} -!! {{{svn_tag}}} -!! {{{cvs_getrepos}}} -!! {{{cvs_geturl}}} -!! {{{cvs_add}}} -!! {{{cvs_remove}}} -!! {{{cvs_copy}}} -!! {{{cvs_move}}} -!! {{{cvs_mkdir}}} -!! {{{cvs_commit}}} -!! {{{cvs_status}}} -!! {{{cvs_update}}} -!! {{{cvs_push}}} -!! {{{cvs_diff}}} -!! {{{cvs_tag}}}-
!! {{{virsh_filter}}} -{{{ -filtrer une sortie liste de virsh. En pratique, ne prendre que les lignes -non vides à partir de la ligne "----*" -}}} -!! {{{virsh_list}}} -!! {{{virsh_pool_list}}} -!! {{{guess_vm_type}}} -{{{ -Afficher hn, kvm, vmware, virtualbox ou openvz suivant que l'on est -*probablement* respectivement sur une machine physique, une machine -virtuelle kvm, vmware, virtualbox, openvz -XXX pour le moment, seuls openvz, kvm et hn sont supportés -}}}-
!! {{{compute_webobjects_prefixes}}} -!! {{{recompute_webobjects_prefixes}}} -!! {{{get_NEXT_ROOT_prefix}}} -!! {{{get_WOROOT_prefix}}} -!! {{{get_LOCALROOT_prefix}}} -!! {{{get_SYSTEMFRAMEWORKS_prefix}}} -!! {{{get_WOEXTENSIONS_prefix}}} -!! {{{get_WOFRAMEWORKS_prefix}}} -!! {{{get_WOAPPLICATIONS_prefix}}} -!! {{{get_WOCONFIGURATION_prefix}}} -!! {{{get_WOAUTOSTART_prefix}}} -!! {{{get_WOLOGS_prefix}}} -!! {{{get_WOVERSION_prefix}}} -!! {{{is_wobundle}}} -{{{ -Tester si $1 a un nom de bundle valide, c'est à dire avec l'extension .woa -ou .framework -}}} -!! {{{is_woappdir}}} -{{{ -Tester si $1 est un répertoire d'application webobjects. Le test est -effectué sur le contenu du bundle, pas sur le nom (utiliser is_wobundle() -pour cela) -}}} -!! {{{is_wofwkdir}}} -{{{ -Tester si $1 est un répertoire de framework webobjects. Le test est -effectué sur le contenu du bundle, pas sur le nom (utiliser is_wobundle() -pour cela) -}}} -!! {{{get_app_winclspth}}} -{{{ -calculer la valeur de Contents/Windows/CLSSPATH.txt pour l'application $1 -}}} -!! {{{get_infofile}}} -{{{ -Obtenir le chemin vers le fichier Info.plist dans le répertoire de -resource du bundle $1 -}}} -!! {{{read_infofile}}} -{{{ -Lire la version et le numéro de release dans le fichier $1 (chemin vers -Info.plist) et les placer dans les variables $2(=version) et $3(=release) -Retourner 1 si un erreur s'est produite, par exemple si le fichier $1 -n'existe pas ou n'est pas accessible en lecture -}}} -!! {{{write_infofile}}} -{{{ -Ecrire $2 (la version) et $3 (le numéro de release) dans le fichier $1 -(chemin vers Info.plist) -Retourner 1 si un erreur s'est produite, par exemple si le fichier $1 -n'existe pas -}}} -!! {{{get_jawotoolsfile}}} -{{{ -Obtenir le chemin vers le fichier jawotools.properties dans le bundle $1 -}}} -!! {{{read_jawotoolsfile}}} -{{{ -lire le fichier de propriété $1 et placer les valeurs dans les variables -$2(=version), $3(=releaseDate), $4(=description) -}}} -!! {{{save_jawotoolsfile}}} -{{{ -écrire le fichier de propriété $1 avec les valeurs version ($2), -releaseDate ($3) et description ($4) -}}} -!! {{{get_versionfile}}} -{{{ -Obtenir le chemin vers le fichier VERSION.txt dans le répertoire de -resource du bundle $1 -}}} -!! {{{get_configfile}}} -{{{ -obtenir le chemin vers le fichier de configuration du répertoire de -resource du bundle -$1=bundle ou resdir (appdir/Contents/Resources ou fwkdir/Resources) -}}} -!! {{{searchreplace_classpath}}} -{{{ -Dans les fichiers classpath de l'application $1, remplacer $2 par $3. Si -$3 est vide, la ligne est supprimée -}}} -!! {{{dump_jars}}} -{{{ -Afficher les jars des frameworks utilisés par l'application $1 -}}} -!! {{{dump_frameworks}}} -{{{ -Afficher les frameworks utilisés par l'application $1 -}}} -!! {{{remove_framework}}} -{{{ -supprimer le framework $2 (nom de base) des fichiers de classpath du -bundle d'application $1 -}}} -!! {{{add_framework}}} -{{{ -s'il n'y existe pas déjà, ajouter le framework $2 (nom de base ou chemin -absolu) aux fichiers de classpath du bundle d'application $1 -}}} -!! {{{fix_jars_case}}} -{{{ -Vérifier que la casse des jars de tous les frameworks utilisés par -l'application $1 est conforme au système de fichier -}}} -!! {{{verifix_bundle}}} -{{{ -vérifier et corriger le bundle $1. Pour une application, on vérifie que le -script est exécutable. Pour un framework, on vérifie que le framework est -conforme au modèle des framework générés par WebObjects. -}}} -!! {{{compute_fapps}}} -{{{ -Placer dans le tableau $1(=fappnames) la liste des noms de bundle -d'applications qui dépendent du framework $2 -Cette opération est faite à partir des informations sur le système de -fichier. Elle ne peut donc concerner qu'une installation locale. -}}} -!! {{{woraurl}}} -{{{ -Faire une requête avec la méthode $1 sur l'url $2 avec le payload $3 (par -exemple pour la méthode POST). la réponse est disponible dans le fichier -$WORAURL_DATA, $4(=http_code) contient le code de réponse. -Retourner 0 en cas de succès, ou une valeur différente de zéro si un -erreur se produit (typiquement, 3 pour une erreur du serveur, 1 pour une -réponse applicative, comme par exemple si l'application n'existe pas) -Les codes de réponse 2xx et 417 sont des succès -Les autres codes (à priori 4xx ou 5xx) sont des erreurs -note: le code 417 est utilisé par le moniteur pour répondre "Non", par -opposition à 200 utilisé pour répondre "OUI" -}}} -!! {{{wogeturl}}} -!! {{{splitins}}} -{{{ -Analyser le nom $1, qui peut être de forme '', 'Name.woa', -'Name.framework', 'App' ou 'Instance-N' (où N est un nombre), et -initialiser les variables $2(=type) et $3(=name) -Si $1=="", type=all et name="" -Si $1==Name.woa, type=woa et name=Name.woa -Si $1==Name.framework, type=fwk et name=Name.framework -Si $1==App, type=app et name=App -si $1==App-N, type=ins et name=App-N -}}} -!! {{{create_wodirs_maybe}}} -!! {{{check_autostart}}} -{{{ -vérifier la présence du fichier $WOAUTOSTART. Si ce n'est pas le cas, le -créer avec le contenu du tableau $1 -}}} -!! {{{get_autostart_order}}} -{{{ -Initialiser le tableau $1 avec la liste donnée dans le fichier -$WOAUTOSTART -}}} -!! {{{apply_autostart_order}}} -{{{ -Réordonner les valeurs $3..* selon la liste donnée dans le tableau $2, -puis placer le résultat dans le tableau $1. $2 doit être construit avec -get_autostart_order(). Si $2 n'est pas spécifié, la liste est construite -localement. -Si le tableau contient des lignes de délai @N, replacer les délais après -les applications appropriées -}}} -!! {{{wotaskd_stop}}} -!! {{{wotaskd_start}}} -!! {{{javamonitor_stop}}} -!! {{{womonitor_stop}}} -!! {{{javamonitor_start}}} -!! {{{womonitor_start}}} -!! {{{woservices_stop}}} -!! {{{woservices_start}}}-
!! {{{date2version}}} -!! {{{woconf}}} -!! {{{wotag}}} -!! {{{woinst}}}-
!! {{{wom__statistics}}} -{{{ -Afficher les statistiques pour le serveur $1, avec éventuellement le mot -de passe $2 -}}} -!! {{{wom__info}}} -{{{ -Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe -$3, et afficher des informations sur l'application $1 (par défaut, all) -}}} -!! {{{wom__info_filter}}} -{{{ -filtrer le résultat de wom__info en ne gardant que les tags -name, state, activeSessions, autoRecover, deaths, host, port -}}} -!! {{{wom_info}}} -{{{ -Contacter le moniteur sur l'hôte $3, avec éventuellement le mot de passe -$4, et initialiser le tableau $1 avec une liste de valeurs quotés de la -forme: -"'name' 'state' 'activeSessions' 'autoRecover' 'deaths' 'host' 'port'" -concernant l'application $2 (par défaut, toutes les applications). Notez -qu'il y a une ligne par instance d'application -Ces valeurs peuvent être utilisées comme arguments d'une fonction. par -exemple: -wom_info appinfos "" host pw -for args in "${appinfos[@]}"; do -eval "userfunc $args" -done -}}} -!! {{{wom_getValidAndRunning}}} -{{{ -Placer la liste des applications valides dans le tableau $1(=valid_apps) -et la liste des applications qui tournent dans le tableau -$2=(running_apps), en contactant le moniteur sur l'hôte $3, avec -éventuellement le mot de passe $4. -}}} -!! {{{show_appinfo}}} -{{{ -Afficher des informations sur une application. Les arguments doivent être -le résultat de la fonction wom_info() -}}} -!! {{{wom_running}}} -{{{ -Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe -$3, et tester si l'application $1 (par défaut, all) tourne actuellement -}}} -!! {{{wom_start}}} -{{{ -Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe -$3, et démarrer l'application $1 (par défaut, all) -}}} -!! {{{wom_stopped}}} -{{{ -Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe -$3, et tester si l'application $1 (par défaut, all) est actuellement arrêtée -}}} -!! {{{wom_stop}}} -{{{ -Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe -$3, et arrêter l'application $1 (par défaut, all) -}}} -!! {{{wom_forceQuit}}} -{{{ -Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe -$3, et forcer l'arrêt de l'application $1 (par défaut, all) -}}} -!! {{{wom_turnScheduledOn}}} -{{{ -Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe -$3, et activer le flag scheduled sur l'application $1 (par défaut, all) -}}} -!! {{{wom_turnScheduledOff}}} -{{{ -Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe -$3, et désactiver le flag scheduled sur l'application $1 (par défaut, all) -}}} -!! {{{wom_turnRefuseNewSessionOn}}} -{{{ -Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe -$3, et activer le flag refuseNewSession sur l'application $1 (par défaut, -all) -}}} -!! {{{wom_turnRefuseNewSessionOff}}} -{{{ -Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe -$3, et désactiver le flag refuseNewSession sur l'application $1 (par -défaut, all) -}}} -!! {{{wom_turnAutoRecoverOn}}} -{{{ -Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe -$3, et activer le flag autoRecover sur l'application $1 (par défaut, all) -}}} -!! {{{wom_turnAutoRecoverOff}}} -{{{ -Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe -$3, et désactiver le flag autoRecover sur l'application $1 (par défaut, -all) -}}} -!! {{{wom_bounce}}} -{{{ -Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe -$3, et redémarrer l'application $1 (par défaut, all) en mode bounce -}}} -!! {{{wom_clearDeaths}}} -{{{ -Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe -$3, et effacer le compte des morts suspectes pour l'application $1 (par -défaut, all) -}}} -!! {{{wom__getApplications}}} -{{{ -Obtenir des information sur la définition de l'application $1 (ou de -toutes les applications si $1=="") en contactant le moniteur sur l'hôte $2 -avec éventuellement le mot de passe $3. Le résultat est un flux xml, -chaque application étant défini dans un tag <MApplications>. Si un erreur -se produit, l'erreur est dans un tag <Strings> -}}} -!! {{{wom__getApplications_filter}}} -{{{ -filtrer le résultat de wom__getApplications en ne gardant que les tags -name, unixPath, macPath, winPath -}}} -!! {{{wom_getApplications}}} -{{{ -Obtenir la liste des applications définies en contactant le moniteur sur -l'hôte $3 avec éventuellement le mot de passe $4, et initialiser le -tableau $1 avec une liste de valeurs quotées de la forme: -"'name' 'unixPath' 'macPath' 'winPath'" -concernant l'application $2 (par défaut, toutes les applications) -Ces valeurs peuvent être utilisées comme arguments d'une fonction. par -exemple: -wom_getApplications appinfos "" host pw -for args in "${appinfos[@]}"; do -eval "userfunc $args" -done -}}} -!! {{{wom_addApplication}}} -{{{ -Ajouter une application nommée $1 en contactant le moniteur sur l'hôte $2, -avec éventuellement le mot de passe $3. -Soit le nom Name, par défaut l'exécutable se trouve dans -WOAPPLICATIONS/Name.woa/Name et les logs dans /var/log/WebObjects, et le -flag autoRecover est activé -XXX supporter la possibilité de modifier les valeurs par défaut -}}} -!! {{{wom_addInstance}}} -{{{ -Ajouter une instance sur localhost pour l'application nommée $1 en -contactant le moniteur sur l'hôte $2, avec éventuellement le mot de passe -$3. -XXX supporter la possibilité de modifier les valeurs par défaut -}}} -!! {{{check_compute_apps_localhost}}} -{{{ -si les arguments de compute_apps contiennent des bundles de framework, il -faut avoir accès au système de fichier local. vérifier si l'un des -arguments $2..* est un framework. si c'est le cas, vérifier que l'hôte $1 -est localhost. -retourner 0 si c'est ok, 1 s'il y a des frameworks et que host n'est pas -localhost -}}} -!! {{{compute_apps}}} -{{{ -Remplir le tableau $1(=apps) avec la liste des applications correspondant -aux arguments $3...* -Un bundle de framework (Name.framework) est remplacé par la liste des -bundles d'applications qui dépendent de ce framework. Cette information -est obtenue en consultant le système de fichier local. -Un bundle d'application est remplacé par la liste des applications qui -sont définies pour ce bundle. Cette information est obtenue en consultant -le tableau généré par wom_getApplications(), dont le nom est $2 -Les arguments de la forme @N sont ignorés, ils correspondent à des délais -à respecter lors du démarrage de l'application -}}} -!! {{{get_error_msg}}} -!! {{{start_apps}}} -{{{ -Démarrer les applications $3..$* en contactant le moniteur sur l'hôte $1 -avec le mot de passe éventuel $2 -Les variables globales enable_autorecover et force_enable_autorecover -permettent respectivement d'activer l'autoRecover après le démarrage de -l'application et de forcer l'activation de l'autoRecover même si -l'instance tournait déjà. -Un argument de la forme @N provoque une attente de N secondes. Ceci permet -de placer un temps d'attente entre le démarrage de certaines applications. -}}} -!! {{{stop_apps}}} -{{{ -Arrêter les applications $3..$* en contactant le moniteur sur l'hôte $1 -avec le mot de passe éventuel $2 -Les variables globales disable_autorecover et force_disable_autorecover -permettent respectivement de désactiver l'autoRecover après l'arrêt de -l'application et de forcer la désactivation de l'autoRecover même si -l'instance ne tournait pas. -L'option {-a ARRAY} permet de remplir ARRAY avec la liste des applications -qui ont été effectivement arrêtées. Cette option si elle est spécifiée -doit être en premier -Pour compatibilité avec start_apps, les arguments de la forme @N sont -ignorés. Il n'y a pas de temps d'attente entre les applications lors de -l'arrêt. -}}} -!! {{{bounce_apps}}} -{{{ -Redémarrer les applications $3..$* en mode bounce en contactant le -moniteur sur l'hôte $1 avec le mot de passe éventuel $2 -Pour compatibilité avec start_apps, les arguments de la forme @N sont -ignorés. Il n'y a pas de temps d'attente entre les applications lors du -redémarrage. -}}}-
!! {{{wosign_setup_maybe}}} -!! {{{wosign_jar}}} -!! {{{wosignable}}} -!! {{{wosign}}} -{{{ -Signer un bundle, les jars d'un répertoire, ou un jar -L'option -f force la resignature des jars d'un répertoire ou d'un -bundle. Elle force aussi la signature d'un jar, même s'il semble qu'il -soit la version signée d'un autre jar -on présuppose que wosignable a retourné true -}}}-
!! {{{wot_config}}} -{{{ -Afficher la configuration de wotaskd -}}}-
{{{ -ulibshell: Lancer un shell après avoir chargé des modules de ulib - -USAGE - ulibshell [options] [args...] - -OPTIONS - -r module - Spécifier un module à charger avec urequire. Plusieurs modules peuvent - être spécifiés en les séparant par ':' - -Un shell est lancé dans lequel les modules spécifiés sont chargés. Par défaut, -seul le module DEFAULTS est chargé. Les arguments sont passés inchangés au -shell. -}}}-
{{{ -ulibsync: Copier les librairies ulib et/ou pyulib - -USAGE - ulibsync [options] destdir - -OPTIONS - -u Copier ulib - -p Copier pyulib -}}}-
{{{ -ulink: déplacer, supprimer, copier un fichier ou un lien - -Quand on déplace ou qu'on copie un lien, la destination du lien est mise à jour - -USAGE - ulink mv files... dest - ulink cp files... dest - ulink rm files... - -OPTIONS - -d UPDATEDIR - Chercher dans UPDATEDIR tous les liens qui pointent vers le fichier - concerné, et mettre à jour ces liens après avoir déplacé le fichier, ou - supprimer ces liens si le fichier est supprimé. -}}}-
{{{ -umatch: Afficher le résultat d'une recherche par regexp et compter -éventuellement leurs occurences - -USAGE - umatch [options] [regexp] - -Chaque ligne *entière* de stdin est mise en correspondance avec l'expression -regulière qui doit avoir la syntaxe de awk. S'il y a correspondance, afficher -soit toute l'expression matchée, soit chaque groupe s'il y a des expressions -parenthésées, chacun des groupes étant séparé par le caractère sep. - -Si l'expression régulière n'est pas spécifiée, elle vaut par défaut '.*' ce qui -fait que toutes les lignes correspondent. Ceci peut être utile avec les options --s et -c. - -Certaines expressions régulières sont prédéfinies. regexp peut avoir l'une des -valeurs prédéfinies suivantes: - - ip --> [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+ - -OPTIONS - -F sep - Spécifier le caractère séparateur en sortie s'il faut afficher des - champs multiples. Par défaut, utiliser le caractère ':' - Si un séparateur vide est spécifié, le séparateur standard de awk est - utilisé. - -s Trier le résultat - -C FIELDNUM - -c, --count - Compter les occurences successives de la valeur du champ FIELDNUM, et - afficher une ligne de la forme 'count<sep>last_line' pour chaque groupe, - last_line étant la dernière occurence du groupe. L'option -c correspond - à '-C 0', c'est à dire compter les occurences successives de toute les - lignes. - Le séparateur utilisé pour calculer le numéro de champ est sep, spécifié - avec l'option -F. - -a, --all-lines - Avec les options -c/-C, afficher toutes les lignes des occurences - successives au lieu de seulement la ligne de la dernière occurence. Ceci - est utile surtout avec l'option -C, pour voir les différences avec les - différentes lignes. - -m, --multiple - Avec les options -c/-C, n'afficher que les lignes dont le compte est - supérieur à 1. Avec l'option -a, les groupes contigus sont séparés par - une ligne '--' -}}}-
{{{ -umirror: faire un miroir d'un site web - -USAGE - umirror [options] url [wget_options] - -OPTIONS - -l - Convertir les liens pour consultation locale -}}}-
{{{ -USAGE: - upassword -p [-f aeskeyfile] [clear [salts...]] - upassword -p [-f aeskeyfile] -j JKEY codetu [salts...] - upassword -p -f aeskeyfile -k crypted [salts...] - upassword -f aeskeyfile -G [password [salt]] - upassword -f aeskeyfile -s - upassword -f aeskeyfile -e clear - upassword -f aeskeyfile -d crypted - upassword --batch - -OPTIONS - -p, --hash-password - Crypter un mot de passe (option par défaut). Si le mot de passe en clair - et/ou le salt ne sont pas spécifiés, ils sont choisis au hasard. - -j, --clear-is-codetu JKEY - Indiquer que l'argument clear est un numéro d'étudiant, à partir duquel - il faut générer le mot de passe. Cette option n'est valide qu'avec -p - -k, --clear-is-crypted - Indiquer que l'argument clear doit d'abord être décrypté avec la clé AES - spécifiée avant utilisation. Cette option n'est valide qu'avec -p - -G, --aes-genkey - Générer une clé AES pour utilisation avec les options -s, -e, -d - -s, --aes-showkey - Afficher encodée en base64 la clé AES contenue dans le fichier spécifié - -e, --aes-encrypt - Crypter un mot de passe avec la clé AES spécifiée - -d, --aes-decrypt - Décrypter un mot de passe avec la clé AES spécifiée - -f, --aes-keyfile - Spécifier le fichier contenant la clé AES. Cette option est obligatoire - avec les options -G, -s, -e et -d - --shell - Afficher les valeurs pour évaluation par le shell - -MODE BATCH -Utiliser l'option --batch active le mode batch. Dans ce mode, chaque ligne est -un ensemble d'arguments, comme si on avait lancé le script à plusieurs reprises. -L'analyseur est limité: le découpage des arguments est fait sur les espaces. -Les lignes commençant par # sont ignorées. -Si une ligne commence par --batch-after, alors cette ligne est affichée après -chaque résultat. Ceci permet de générer un script qui peut être évalué. - -Voici un exemple: - upassword --batch <<EOF - --batch-after process_password1 args - --shell - --shell fixed-password1 - --batch-after process_password2 args - --shell fixed-password2 - EOF -Le résultat serait quelque chose comme: - clear='<random-password>' - ... # toutes les valeurs lm, ntlm, crypt, sha, xsha, ssha, md5, smd5 - process_password1 args - clear='fixed-password1' - ... # toutes les valeurs lm, ntlm, crypt, sha, xsha, ssha, md5, smd5 - process_password1 args - clear='fixed-password2' - ... # toutes les valeurs lm, ntlm, crypt, sha, xsha, ssha, md5, smd5 - process_password2 args -}}}-
{{{ -update-nutools: mettre à jour nutools -}}}-
{{{ -uprefix: Afficher les préfixes valides pour uinst - -USAGE - uprefix -l|--dump|prefix... - -OPTIONS - -l - Afficher la liste des préfixes valides - --dump - Afficher la liste des préfixes valides et leurs valeurs - prefix - Afficher la valeur du préfixe spécifié -}}}-
{{{ -uproject: Outil pour gérer des projets - -USAGE - uproject cmd [args] - -COMMANDS - getvcs [dir] - Afficher le type de VCS pour dir. - getroot [dir] - Si dir est un répertoire versionné, retourner le répertoire racine du - projet versionné. - getrepos [dir] - Si dir est un répertoire versionné, retourner l'url du repository du - projet versionné. - geturl [dir] - Si dir est un répertoire versionné, retourner son url dans le - repository. - fold [dir] - unfold [dir] - Utiliser uinc pour défaire (resp. refaire) toutes les inclusions des - fichiers de dir. Cela nécessite qu'un fichier .udir soit configuré à la - racine du projet avec uinc=true - vcs [args] - Appeler le gestionnaire de gestion approprié avec les arguments donnés. - add files... - Ajouter les fichiers files dans le gestionnaire de version. - remove files... - Supprimer les fichiers versionnés files. - copy from to - Copier le fichier versionné from vers le fichier to. - move from to - Renommer le fichier versionné from vers le fichier to. - mkdir dir - Créer un nouveau répertoire versionné. - commit message [files...] - Enregistrer les modifications (par défaut sur tous les fichiers - modifiés) avec le commentaire message. - status - Afficher l'état des fichiers versionnés et non versionnés. - update [-x] - Mettre à jour la copie locale avec la copie sur le serveur. - -x Ne pas mettre à jour les références externes (si appliquable) - -n, --no-autoff - Ne pas faire de fast-forward automatique pour toutes les branches - traquées. Par défaut, s'il n'y a pas de modifications locales, - essayer de fast-fowarder toutes les branches locales traquées. - diff [options] - Afficher les différences. - -l Afficher les différences non commitées (par défaut) - -c Afficher les différences en passe d'être commitées (si appliquable) - -r REV - Afficher les différences depuis la révision REV. - -R Afficher les modifications effectuées depuis la dernière release. - - clone git@host:path/to/repo [destdir] - Cloner un dépôt distant. Initialiser git annex si le dépôt contient des - fichiers annexés. Récupérer aussi ces fichiers avec 'git annex get' - - crone git@host:path/to/repo [destdir] - Créer un dépôt distant sur gitolite, puis le cloner - - develop - release - hotfix - Démarrer le travail sur une branche respectivement de développement, de - release, ou de correction de bugs. Lancer chaque commande avec --help - pour les détails. Nécessite git. - - archive - Créer une archive du projet courant. Nécessite git. - - annex [args] - Lancer git annex avec les arguments spécifiés. - xadd - xunlock - xdrop - xwhereis - xwebapp - Chacune de ces commandes est un raccourci vers la commande - correspondante de git annex, sans le préfixe 'x' - xsync - Sur un dépot où git-annex est activé, lancer 'git annex sync' si on est - en mode indirect ou 'git annex sync --content' si on est en mode direct. - Sur un dépôt où git-annex n'est pas activé, faire l'équivalent des - commandes 'git add -A && git commit && git pull && git push' - xcopy - xmove - xget - Comme ci-dessus, mais si la commande s'exécute sans erreur, lancer - aussi 'git annex sync' - xinitial - Sur un dépôt fraichement cloné, initialiser le dépôt avec 'annex init' - s'il contient des fichiers annexés. Récupérer aussi ces fichiers avec - 'annex get' - xconfig-export [dir] - Installer des hooks pour qu'un dépôt puisse être utilisé pour servir des - fichiers, par exemple avec un serveur web. Plus précisément, un hook - post-receive est créé avec la commande 'git annex merge', et un hook - post-update est créé avec la commande 'git update-server-info' - - printml [-t TYPE] - Afficher le modeline pour un fichier du type spécifié - addml [-t TYPE] file - Ajouter un modele pour le fichier spécifié, s'il n'en a pas déjà un. - Si nécessaire, forcer le type du fichier au lieu de l'autodétecter - new [options] file [template options] - Créer un nouveau fichier à partir d'un modèle. - Avant le nom du fichier, les options suivantes sont valides: - -t TEMPLATE - Spécifier le modèle de fichier à utiliser. Par défaut, le modèle - à utiliser est déduit de l'extension ou du nom du fichier. - -e Editer le fichier après l'avoir créé. - Après le nom du fichier, toutes les options sont spécifiques au modèle - utilisé pour créer le nouveau fichier. Utiliser l'option --help pour - avoir une description des options disponibles. -}}}-
{{{ -uscrontab: lancer une suite de commande en respectant une planification de type cron - -USAGE - uscrontab [options] [/path/to/uscrontab] [var=value...] - uscrontab -e [/path/to/uscrontab] - uscrontab -l - -La première forme du script doit normalement être lancé toutes les minutes par -une tâche cron. Utiliser l'option --install pour ajouter automatique la ligne -dans la crontab de l'utilisateur. - -Avec la première forme du script, le fichier spécifié est traité. Si aucun -fichier n'est spécifié, fusionner s'il existe le fichier - /var/local/uscrontab/users/jclain -avec chacun des fichiers du répertoire - /var/local/uscrontab/users.d/jclain -dans un fichier temporaire, puis exécuter le fichier résultat avec le nom -virtuel - /var/local/uscrontab/jclain -note: le nom virtuel est utilisé pour le verrouillage avec --lock - -A chaque lancement de ce script, le fichier /path/to/uscrontab spécifié est -examiné pour déterminer quels commandes doivent être exécutées. Ce fichier est -composé de lignes dans un format particulier, qui sont analysées et traitées -dans l'ordre. - -Quelles que soient les lignes qui sont sélectionnées pour l'exécution, elles -sont garanties de s'exécuter dans l'ordre du fichier, l'une après l'autre. - -Les définitions var=value mentionnées sur la ligne de commande sont des -définitions de variables à effectuer avant de lancer les commandes. - -Les lignes commençant par # sont des commentaires et sont ignorées - -== Définitions de variables et exécution de commandes == - - Les lignes de la forme suivante sont des définitions de variable: - - [export] var="valeur de la variable" - - Ces lignes sont des définitions de variable bash qui sont exécutées telles - quelles. Il n'est donc pas autorisé de mettre des espaces autour de =. Par - exemple, les lignes suivantes sont des erreurs de syntaxe: - - var = bad - var=pas de quotes autour de la valeur - - alors que celles-ci sont correctes: - - var=ok - var="valeur avec des espaces" - var='on peut utiliser des quotes aussi' - - Il est possible de manipuler les variables de type PATH avec une syntaxe - particulière de l'opérateur d'assignation. Les opérateurs += et %= utilisent - uaddpath(), #= utilise uinspath() et -= utilise udelpath(). Par exemple, les - lignes suivantes ajoutent respectivement /usr/local/nutools puis enlèvent - /opt/rogue au PATH: - - PATH+=/usr/local/nutools - PATH-=/opt/rogue - - Bien sûr, il ne faut pas oublier de quoter les espaces: - - PATH+="/path/to/dir with spaces" - - La syntaxe ?= permet de définir la valeur d'une variable si elle n'est pas - déjà définie: - - var?=default - - Les lignes de la forme suivante permettent d'exécuter une commande qui est - exécutée systématiquement et ignore la planification: - - $one-line-command - - Une variante permet de spécifier des commandes sur plusieurs lignes. - ATTENTION! ${ et $} doivent être tous seuls sur la ligne. - - ${ - several - commands - ... - $} - - Ces commandes sont exécutées systématiquement et ignorent la planification. - On peut s'en servir notamment pour lire un fichier de configuration qui - définit des variables ou des fonctions: - - $source path/to/file - - Le code d'erreur de ces commandes est ignoré, contrairement à ce qui se - passe pour les commandes qui font l'objet d'une planification. - -== Planification de commandes == - - Les autres lignes doivent être au format d'une ligne de crontab: - - minutes hours days months dows command-line - - command-line peut être n'importe quelle ligne de commande bash, pourvu - qu'elle soit sur une seule ligne. - - Certaines extensions par rapport à la syntaxe de crontab sont autorisées. Il - est en particulier possible de spécifier plusieurs planifications pour une - seule commande. Par exemple, les lignes suivantes permettent d'exécuter - 'command' toutes les heures ET à 1h05: - - 0 * * * * - 5 1 * * * command - - Il est aussi possible d'utiliser la même planification pour plusieurs - commandes sans devoir répéter la définition de la planification. Les lignes - suivantes planifient command1 et command2 toutes les heures: - - 0 * * * * command1 - command2 - - Pour être prise en compte, la ligne command2 doit commencer par au moins un - espace ou une tabulation. Pour la lisibilité, la syntaxe suivante est - supportée aussi: - - 0 * * * * - command1 - command2 - - Les deux formats peuvent être utilisés ensemble. Par exemple les lignes - suivantes exécutent command1 et command2 toutes les heures ET à 1h05: - - 0 * * * * - 5 1 * * * command1 - command2 - - Par défaut, le script s'arrête à la première commande planifiée qui retourne - avec un code d'erreur. Il est possible d'ignorer le code d'erreur d'une - commande avec nostop, e.g: - - 0 * * * * nostop command - - Cf aussi l'option --continuous pour modifier le comportement par défaut - -== Fonctions disponibles == - - La fonction check_pidfile() est disponible, et permet de vérifier qu'une - opération n'est pas déjà en cours. Si cette fonction est utilisée, il ne - faut pas modifier la valeur de -k. Par exemple: - - 0 1 * * * - check_pidfile /path/to/pid [args] - long-running-script - - check_pidfile() doit être utilisée toute seule sur la ligne et s'utilise - avec les argument suivants: - - check_pidfile PIDFILE [DESC] [BARRIER] - - - PIDFILE est le fichier de PID qui est vérifié - - DESC est la description du traitement qui est effectué. La valeur par - défaut est "Une synchronisation". Si le fichier de PID est présent, le - message suivant est affiché: - DESC est en cours. - Si vous pensez que c'est une erreur, veuillez vérifier le process de pid PID - puis supprimez le cas échéant le fichier PIDFILE - - BARRIER est un fichier qui est créé avec le contenu 'PID' s'il n'existe - pas encore, et si la vérification du fichier de PID est faite avec succès. - La présence de ce fichier peut-être vérifiée par un processus externe pour - empêcher par exemple de mettre à jour les scripts pendant qu'il sont en - train de tourner. - Son contenu peut être examiné pour connaître le PID du processus qui l'a - créé initialement. Le fichier est automatiquement supprimé à la fin de ce - script. - Attention: ce fichier n'est pas un verrou, il peut être supprimé à tout - moment. Notamment, si deux scripts sont configurés pour créer le même - fichier barrière, le premier script supprimera le fichier barrière avant - la fin de l'exécution du second script. - - La fonction remove_pidfile() permet de supprimer un fichier de pid pour - spécifier qu'une opération est terminée. Considérons l'exemple suivant: - - 0 1 * * * - check_pidfile /path/to/pid - script1 - script2 - remove_pidfile /path/to/pid - script3 - - Dans cet exemple, il ne faut pas qu'une autre occurence de script1 tourne - pendant que script2 tourne. Par contre, plusieurs occurences de script3 - peuvent tourner en parallèle. - - La fonction elogto() permet de spécifier un fichier vers lequel toutes les - sorties sont redirigées. - -OPTIONS - -A, --install - Installer une planification toutes les minutes du script dans la crontab - de l'utilisateur. Si l'argument /path/to/uscrontab n'est pas spécifié, - c'est une planification générique qui exécute les fichiers par défaut - qui est installée. - -R, --uninstall - Désinstaller la planification toutes les minutes du script de la crontab - de l'utilisateur. Si l'argument /path/to/uscrontab est spécifié, cette - instance est désinstallée. Sinon, ne désinstaller que la planification - générique. - -d, --disable-only - Avec l'option -R, désactiver la planification au lieu de la supprimer. - -e, --edit - Lancer un editeur pour modifier l'uscrontab spécifiée. Si aucun fichier - n'est spécifié, éditer /var/local/uscrontab/users/jclain - -a, --add - Installer un script uscrontab dans le répertoire approprié. L'argument - doit être de la forme [name:]/path/to/uscrontab - Si name n'est pas spécifié, le nom de base du fichier spécifié est - utilisé. Si name est vide ou vaut $USER (soit jclain en l'occurence), - copier le fichier spécifié vers le chemin /var/local/uscrontab/users/jclain - Sinon, copier le fichier spécifié vers /var/local/uscrontab/users.d/jclain/name - -r, --remove - Supprimer le script uscrontab spécifié. L'argument doit être le nom du - script à supprimer. Si l'argument n'est pas spécifié ou vaut $USER - (soit jclain en l'occurence), supprimer le fichier /var/local/uscrontab/users/jclain - s'il existe - -l, --list - Si l'argument /path/to/crontab est spécifié, afficher le contenu de ce - fichier. Sinon, lister les contenus des fichiers crontab qui sont - exécutés avec la planification actuelle. Si une planification générique - est installée, ou si aucune planification n'est en cours, afficher le - contenu du fichier - /var/local/uscrontab/users/jclain - et chacun des fichiers du répertoire - /var/local/uscrontab/users.d/jclain - -n, --fake - Afficher au lieu de les exécuter les commandes qui doivent être lancées - -P, --pause-for NBMINS - Désactiver les planifications pendant NBMINS minutes. Utiliser -1 pour - désactiver les planifications sans limite de durée. Pendant la période - de pause, toutes les invocations de uscrontab n'ont aucun effet, sauf si - on utilise l'option --force - -Y, --unpause - Réactiver les planifications après une mise en pause - -p, --pause - Désactiver les planifications pendant 1 journée. Equivalent à -P 1440 - -f, --force - Forcer l'exécution de la planification, même si elle a été mise en pause - avec l'option --pause - -OPTIONS AVANCEES - --lock LOCKFILE - Inscrire dans le fichier spécifié des informations permettant d'éviter - les invocations simultanées de ce script. Si selon ce fichier, le script - tourne depuis plus de 8 heures, un message d'erreur - est consigné et un message d'avertissement est affiché au plus une fois. - Utiliser --lock '' pour désactiver cette fonctionnalité - Par défaut, si ce script est lancé en root, le fichier utilisé pour le - verrouillage est de la forme /var/run/uscrontab/abspath/to/crontab - Si le script est lancé avec un compte utilisateur, aucun verrouillage - n'est effectué. - --lockdelay LOCKDELAY[=8] - Changer le nombre d'heures pendant lesquelles on autorise le script a - verrouiller l'exécution avant d'afficher un avertissement. - -c, --continuous - Par défaut, ce script s'arrête à la première commande planifiée qui - retourne avec un code d'erreur. Notez que les codes d'erreur des - commandes sans planification sont toujours ignorés. Avec cette option, - ce script ne s'arrête jamais, bien qu'il retourne toujours un code - d'erreur si une erreur s'est produite. Il est possible d'ignorer le - code d'erreur pour une commande en particulier avec le préfixe nostop - -k, --stopec EXITCODE[=101] - Spécifier un code d'erreur spécial qui arrête ce script sans erreur, ou - '' pour désactiver cette fonctionnalité. Ceci permet en début de script - de faire des tests par exemple sur l'environnement avant de lancer les - scripts planifiés. Si l'environnement ne convient pas, il suffit au - script de contrôle de retourner le code d'erreur spécifique pour arrêter - le traitement. - --show-ctnow - Afficher l'heure de référence au format crontab 'min hou day mon dow' - Cette valeur peut être utilisée avec l'option --force-ctnow dans des - tests pour reproduire une condition spécifique. - --force-ctnow 'min hou day mon dow' - Pour le développement ou des tests, forcer la valeur de l'heure de - référence. Il faut respecter le format, sinon les résultats ne sont pas - garantis. Le mieux est de reprendre le résultat de l'option --show-ctnow - en le modifiant un peu si nécessaire. -}}}-
{{{ -ussh: se connecter par ssh à un ou plusieurs hôtes - -USAGE - ussh [options] hosts - ussh [options] @hostsfile - ussh -r hosts - ussh --parse hosts - -OPTIONS - hosts - @hostsfile - Spécifier un ou plusieurs hôtes distants sur lequels faire la connexion. - Pour spécifier plusieurs hôtes, il faut les séparer par un espace ou le - caractère ':', e.g. 'host1 host2' ou 'host1:host2'. Si la spécification - contient les caractères { et }, l'expansion est effectuée, e.g - 'root@{host1,host2}.univ.run' - La forme @hostsfile permet de lire la liste des hôtes depuis le fichier - hostsfile, à raison d'un hôte par ligne. - -Toutes les options de ssh sont reconnues. Les options longues suivantes sont -reconnues comme alias de certaines options courtes de ssh: - --quiet - alias de -q, activer le mode non verbeux - --tty - alias de -t, forcer l'allocation d'un TTY - --login USER - alias de -l, spécifier le user avec lequel se connecter - --port PORT - alias de -p, spécifier le port sur lequel se connecter - -Les options suivantes sont exclusives à ce script: - -d, --domain DOMAIN - Spécifier un domaine par défaut pour les hôtes qui sont spécifiés sans - domaine. - -z, --ssh SSH - Spécifier l'exécutable à utiliser pour lancer ssh. - -r, --remove - Lancer 'ssh-keygen -R' pour chacun des hôtes spécifiés avant de s'y - connecter. Par exemple: - ussh -r host.tld - est équivalent à: - ssh-keygen -R host.tld - ssh-keygen -R host - ssh-keygen -R 10.10.1.5 - ssh host.tld - si l'adresse ip de host.tld est 10.10.1.5 - Quand cette option est spécifié, l'option -j est reconnue et permet de - NE PAS se reconnecter à l'hôte juste après avoir nettoyé les clés. Avec - l'option -j, TOUS les arguments sont des noms d'hôte puisqu'aucune - connexion n'est effectuée. - --exec - --no-exec - Avec --exec, si un seul hôte est spécifié, lancer le processus ssh avec - exec, pour éviter d'encombrer la mémoire. C'est l'option par défaut. - Avec --no-exec, ne jamais utiliser exec pour lancer ssh. - --parse - Afficher la définition des variables ssh, options, hosts et args qui - permettent d'effectuer la connexion à partir d'un autre script. Exemple: - eval "$(ussh --parse args...)" - for host in "${hosts[@]}"; do - ${exec:+exec} "$ssh" "${options[@]}" "$host" "${args[@]}" - done - --cc - Assumer que nutools est installé sur l'hôte distant, et y lancer uwatch - avec l'option --cc, pour permettre de garder la connexion active dans le - cadre d'une redirection de port. - -Si la variable UTOOLS_USSH_RSYNC_SUPPORT contient une valeur non vide, l'analyse -des arguments s'arrête à la première valeur qui n'est pas une option, afin de -permettre l'utilisation de ce script avec l'option -e de rsync. -}}}-
{{{ -usysinfos: Afficher les informations sur le système - -USAGE - usysinfos [query] - -Si la requête est spécifiée, tester si le système courant correspond à la -requête. Voir la doc de check_sysinfos() pour le format de la requête. - -Sinon, afficher les informations sur le système courant. -}}}-
{{{ -utempl: Créer un nouveau fichier à partir d'un modèle - -USAGE - utempl [options] file [template options] - -OPTIONS -Avant le nom du nouveau fichier, les options suivantes peuvent être utilisées: - -t TEMPLATE - Spécifier le modèle de fichier à utiliser. Par défaut, le modèle - à utiliser est déduit de l'extension ou du nom du fichier. - -e, --edit - Editer le fichier après l'avoir créé - -g, --no-edit - Ne pas éditer le fichier après l'avoir créé - -Après le nom du fichier, toutes les options sont spécifiques au modèle -utilisé pour créer le nouveau fichier. Utiliser l'option --help pour -avoir une description des options disponibles. -}}}-
{{{ -utrigger: lancer une commande en différé - -USAGE - utrigger [options] -- command [args] - -La commande est lancée après un certain temps, sauf si ce script est rappelé -(auquel cas le compte est réinitialisé), ou si l'opération est annulée. -Attention! La commande est lancée en tâche de fond, et son entrée standard est -connectée à un fichier qui peut être provisionné avec l'option -a - -note: ce script ne fonctionne que sous Linux puisqu'il utilise la commande flock - -OPTIONS - -n, --name NAME - Spécifier un nom identifiant la tâche. Par défaut, le nom est généré à - partir des détails de la tâche à lancer. Ce nom est utilisé pour - identifier les invocations successives. - -f, --cmdfile CMDFILE - Spécifier un fichier contenant les commandes à lancer. Le fichier est - sourcé dans un sous-shell. Utiliser - pour lire les commandes depuis - l'entrée standard. - --rundelay RUNDELAY[=5] - Nombre de secondes au bout desquelles la commande est lancée. Si ce - script est relancé avant la fin de ce décompte, le compte est remis à - zéro. - Utiliser --rundelay '' pour désactiver cette fonctionnalité, auquel cas - la commande est lancée immédiatement. - -s, --sudo - Forcer l'exécution de la commande avec l'utilisateur root si ce n'est - pas déjà le cas - -a, --datafile DATAFILE - Accumuler des données à fournir à la commande. Les informations du - fichier DATAFILE (utiliser - pour l'entrée standard) sont ajoutées à un - fichier temporaires, et sont fournies en une seule fois à la commande - sur son entrée standard. - -A, --data DATA - Variante de --datafile où les données sont fournies sur la ligne de - commande au lieu d'un fichier externe. Si les deux options -a et -A sont - spécifiées, les données sont accumulées dans l'ordre --datafile puis - --data - -k, --cancel - Annuler le lancement planifié d'une commande. Si la commande est déjà en - train de tourner, cette option n'a aucun effet. -}}}-
{{{ -uwatch: afficher l'heure - -USAGE - uwatch [options] - -OPTIONS - -t, --time - Afficher l'heure (par défaut) - -c, --count - Afficher le temps écoulé depuis le lancement de ce script - -u, --units - Avec l'option --count, afficher l'unité: sec., min. ou heures - -o, --offset NBSEC - Avec l'option --count, spécifier un nombre de secondes à partir duquel - compter - -s, --step NBSECS[=1] - Spécifier la période de rafraichissement de l'affichage - -a, --prefix PREFIX - Spécifier une chaine à afficher avant l'heure - -z, --suffix SUFFIX - Spécifier une chaine à afficher après l'heure - --cc - Equivalent à -c -s 5 -a 'Connecté sur $MYHOST depuis ' -z '...' - Permet de garantir une activité sur une connexion SSH utilisée - uniquement pour faire une redirection de port -}}}-
{{{ -vzusage: afficher des informations sur une machine virtuelle OpenVZ - -USAGE - vzusage [options] [params...]d - -OPTIONS - -b Afficher les informations de /proc/user_beancounters - -f N'afficher que les valeurs pour lesquelles failcnt > 0. - Implique -b - -z coef - Afficher les instructions à utiliser pour augmenter de coef% les - valeurs pour lesquelles failcnt > 0. Implique -f - -c config|veid - Afficher les informations du fichier de configuration plutôt que les - beancounters -}}}-
{{{ -woArchive: créer une archive de la distribution WebObjects en cours -USAGE - woArchive [-n name] [-f files] - -OPTIONS - -n NAME - Nom de base de l'archive. Par défaut il s'agit de WebObjects-<version> - - -f FILES - Nom de la liste des fichiers de l'archives. Par défaut il s'agit de - $NAME.files -}}}-
{{{ -woSwitch: Changer la version de WebObjects pour le système en cours -USAGE - woSwitch [-f from.files] to-archive.tar.gz - -OPTIONS - -f from.files - Spécifier la liste des fichiers pour la version de WebObjects - installée. Par défaut, il s'agit de WebObjects-<version>.files - La liste doit correspondre à la version en cours. - - -F Forcer l'installation, même si la version en cours ne correspond pas à ce - qui est inscrit dans from.files - - to-archive.tar.gz - Nom de l'archive qui contient la version à installer. - -Ce script ne fonctionne que sur MacOS X -Le contenu des répertoires suivants est sauvegardé avant le changement: - /Library/WebObject/Applications - /Library/WebObject/Configuration - /Library/WebObject/Extensions -Ensuite, les répertoires Applications et Configuration sont restaurés. Il faudra -restaurer Extensions manuellement. -}}}-
{{{ -woctl: Contrôler des applications WebObjects - -USAGE - woctl [options] action args - wostart args... - wostop args... - wobounce args... - worestart args... - -OPTIONS - -h HOST - Spécifier l'hôte qui fait tourner le moniteur sous la forme host[:port] - -p PASSWORD - Spécifier le mot de passe pour le moniteur - -ACTIONS - Dans les arguments des actions ci-dessous, une application peut être - spécifiée sous la forme App ou App.woa. Spécifier une application revient à - spécifier toutes les instances configurées pour cette application. - Si on spécifie un framework sous la forme Fwk.framework, cela revient à - spécifier toutes les applications qui dépendent de ce framework. - Sinon, une instance individuelle est de la forme App-N, où N est un entier - positif. - - status - afficher l'état des instances qui tournent actuellement - version - afficher la version de WebObjects installée - wotaskd - javamonitor - woservices - piloter wotaskd/javamonitor - _create - créer une instance par défaut dans javamonitor - configure - configurer un bundle - tag - ajouter une information de version à un bundle - run - lancer une application localement en mode debug - download - télécharger une application ou un framework - start apps... - démarrer une ou plusieurs applications - stop apps... - arrêter une ou plusieurs applications - restart apps... - relancer une ou plusieurs applications - bounce apps... - relancer une ou plusieurs applications en mode bounce -}}}-
{{{ -woinst: Déployer un bundle (application ou framework) de WebObjects - -USAGE - woinst [options] <file|archive|dir>... - -OPTIONS - PREFIX=value - Spécifier une valeur pour un préfixe, plutôt que de laisser uprefix - l'autodétecter. Utiliser uprefix -l pour une liste de préfixes valides. - -b Redémarrer les instances en mode bounce. - Par défaut, les instances sont arrêtées avant le déploiement, et - redémarrées après - -W Ne déployer que les resources web. Implique -n - -n Ne pas tagger les bundles déployés avec un numéro de version. Par - défaut, l'utilisateur est invité à compléter des informations telles - que n° de version et date de release si ces informations ne sont pas - disponible. - -x CMD - Exécuter la commande CMD après avoir effectué le déploiement -}}}-
{{{ -wosign: signer les jars d'un bundle - -USAGE - wosign <app.woa|fwk.framework|file.jar> - -OPTIONS - -f Forcer la (re)signature des jars - -d Enlever la signature des jars originaux - -s Signer les jar du bundle [PAR DEFAUT] - --init - Initialiser les fichiers de configuration pour la signature des bundles. - --sudo - Si le répertoire de destination des fichiers de configuration n'est - accessible en écriture, relancer le script en root. -}}}-