Utiliser des variables systèmes dans un shell script [Résolu/Fermé]

Signaler
Messages postés
1643
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
5 mai 2020
-
Messages postés
1643
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
5 mai 2020
-
Hello,

J'aimerais savoir (ne serait-ce que pour ma culture personnelle) si il existe une façon d'utiliser une variable système (pas environnement) dans un shell script : une de celles qui sortent lorsque l'on tape
set
(et pas une de celles qui sortent quand on tape
env
)

C'est tout bête, je voulais juste faire un schrink (un simple uniq) de mon fichier historique ($HISTFILE) dans un petit script qui aurait été lancé par cron mais impossible de récupérer cette variable qui est une variable système ... Je n'ai pas trouvé comment ... Ce qui marche avec l'environnement (printenv, etc ...) ne fonctionne pas là ... Et rien trouvé sur le net. Alors à part à rentrer le nom du fichier en dur dans le script ... mais bon c'est moche.


1 réponse

Messages postés
35859
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
29 novembre 2020
5 684
Salut,
dans un petit script qui aurait été lancé par cron
Tout est dit dans cette phrase.
cron
n'a pas d'environnement.

Extrait man cron :
ENVIRONMENT
If configured in /etc/default/cron in Debian systems, the cron daemon localisation settings environment can be managed through the use of /etc/environment or through the use of /etc/default/locale with values from the latter overriding values from the former. These files are read and they will be used to setup the LANG, LC_ALL, and LC_CTYPE environment variables. These variables are then used to set the charset of mails, which defaults to 'C'.

This does NOT affect the environment of tasks running under cron. For more information on how to modify the environment of tasks, consult crontab(5)

The daemon will use, if present, the definition from /etc/timezone for the timezone.

The environment can be redefined in user's crontab definitions but cron will only handle tasks in a single timezone.

Messages postés
1643
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
5 mai 2020
264
Hello,

Merci mais en fait, même dans un script tournant dans un shell "normal" j'arrive déjà pas à récupérer cette variable HISTFILE. (autrement qu'en ligne de commande).
La seule solution que j'ai trouvé c'est de la "demoter" en faisant un
export HISTFILE=$HISTFILE
avant de lancer le script.
On peut ensuite utiliser printenv, etc ... dans un script lancé dans ce shell ...

ryko@myhost ~ $ type history
history est une primitive du shell


Bon de toutes façons, apparemment il existe une option
HISTCONTROL=erasedups
qui fait ce que je voulais faire en cron (virer les doublons).

ref. : https://www.pluralsight.com/blog/software-development/how-to-use-bash-command-line-history

... depuis mon besoin à évolué car ce fichier se remplit plus vite que je ne le pensais et même avec HISTSIZE/HISTFILESIZE redéfini, rien qu'hier j'ai eu 400 lignes de plus.
J'envisage donc de le sauvegarder avec horodatage et de réinitialiser ce fichier au lancement de bashrc en faisant un petit comptage des lignes au lancement d'une session bash et si fichier pas loin d'être plein > save & reset,

Je passe en résolu, même si je reste convaincu qu'il y a un moyen d'accéder aux variables systèmes même en C ou Python ...