Utiliser des variables systèmes dans un shell script

Résolu/Fermé
ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 - 25 juin 2016 à 22:27
ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 - 26 juin 2016 à 10:44
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.


A voir également:

1 réponse

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
26 juin 2016 à 09:01
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.

0
ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
Modifié par ryko1820 le 26/06/2016 à 10:57
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 ...
0