j’ai un fichier .bashrc dans lequel il y a le prompt suivant: PS1='${debian_chroot:+($debian_chroot)}[\033[01;32m]\u@\h[\033[00m]:[\033[01;34m]\w[\033[00m]$ '
j’ai un bout de code qui vient changer la couleur 32m en 31m:
if [ -f /root/.bashrc ]; then
echo $(grep -E 32m /root/.bashrc)
sed -Ei 's/32m/31m/g' /root/.bashrc
else
printf '%s\n' " - Erreur: le fichier /root/.bashrc n'existe pas"
fi
Sauf qu’il ne marche pas (l’echo sert juste à vérifier dans les logs que je trouve bien la bonne ligne).
pas d’erreur dans les logs.
non c’est un fichier en bonne et due forme. -E c’est pour les regexp-extended. AU départ la ligne sed est un peu plus complexe.
mais quand je fais la commande manuellement (identique) elle passe direct. C’est un peu le problème. J’ai plein d’autre sed dans mon script et ils n’ont pas de problèmes.
Si t’as envie d’appeler ça ainsi… perso, c’est plus une substitution, mais bon, pourquoi pas, hein !?
Même dans ton echo, tel qu’écrit ainsi, tu n’as pas besoin de l’option -E…
un simple grep 32m -- /root/.bashrc suffit. Et je serais même d’avis que l’utilisation de la function echo ici n’est pas nécessaire, puisque grep affiche son résultat dans la sortie standard.
sauf que je ne suis pas dans l’environnement d’execution standard mais dans celui de l’exécution postinst de l’installateur sur un preseed. je voulais être sur d’avoir la trace utilisable dans le /var/log/installer/syslog une fois la machine redémarrée.
Je sais qu’on est hors-contexte de ton besoin initial…
est-ce que l’option log-output de l’installateur Debian ne répondrait pas plus efficacement à ton besoin d’affichage de retour système, pour garder de manière adéquate trace dans le log ?
Peux tu recopier le .bashrc sur /tmp juste après la modif dans ton script. Il faut savoir si la modification est faite (à mon avis oui) et le fichier resurchargé après (parce que édité ailleurs par exemple) ou si la modification ne se fait pas. Tu regardes /tmp/.bashrc après execution
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# make less more friendly for non-text input files, see lesspipe(1)
#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color|*-256color|linux) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
alias dir='dir --color=auto'
alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# colored GCC warnings and errors
export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
# some more ls aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
# Changes to $PATH
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:/usr/sbin:$PATH"
fi
/bin/neowofetch --config /etc/hyfetch/hyfetch.conf
Pour /tmp/.bashrc, je ne ne peux pas car c’est lors de l’installation automatisée (preseed) que ça se produit, et le temps que je regarde il a redémarré; en ensuite il n’y a plus rien s’il y avait quelque chose.
J’ai enlevé le -E et juste laissé -i, mais rien non plus.
Quelques dizaines de lignes plus loin, j’ai celle-ci qui marche très bien:
sed -Ei 's/^[#]*\s*(precedence\s+\:\:ffff\:0\:0\/96\s+100)/\1/' /etc/gai.conf
Voici tous les sed du fichier de postinstallation lancé par preseed, c’est la seule qui ne marche pas:
sed -Ei '/todelete/d' /etc/fstab && logger -p syslog.info "todete removed from /etc/fstab"
sed -i 's/32m/31m/g' /root/.bashrc
sed -i 's/^"syntax on/syntax on/' /etc/vim/vimrc
sed -i 's/^"set\sbackground=dark/set background=dark/' /etc/vim/vimrc
sed -i '/^set\sbackground=dark/a set t_Co=256' /etc/vim/vimrc
sed -i '/^set\st_Co=256/a set termguicolors' /etc/vim/vimrc
sed -Ei 's/^"(au BufReadPost.*)/\1/g' /etc/vim/vimrc
sed -i 's/^"filetype plugin indent on/filetype plugin indent on/' /etc/vim/vimrc
sed -i 's/^"set showcmd/set showcmd/' /etc/vim/vimrc
sed -i 's/^"set showmatch/set showmatch/' /etc/vim/vimrc
sed -i 's/^"set mouse=a/set mouse=n/' /etc/vim/vimrc
sed -Ei 's/^[#]*\s*(precedence\s+\:\:ffff\:0\:0\/96\s+100)/\1/' /etc/gai.conf
sed -Ei '/[[]Seat:\*]/a display-setup-script=/usr/local/sbin/lightdm-setup.sh' /etc/lightdm/lightdm.conf
sed -i '/syslog/d' /lib/systemd/system/shorewall-init.service
sed -i '/syslog/d' /lib/systemd/system/shorewall.service
sed -i '/syslog/d' /lib/systemd/system/shorewall6.service
sed -i 's/PRODUCTS=""/PRODUCTS="shorewall shorewall6"/' /etc/default/shorewall-init
sed -i 's/IFUPDOWN=0/IFUPDOWN=1/' /etc/default/shorewall-init
sed -Ei 's/Shorewall/Shorewall6/g' $dir/interfaces
sed -Ei 's/shorewall/shorewall6/g' $dir/interfaces
sed -Ei '/^\?SECTION NEW/a Webmin(ACCEPT)\t$Z_LAN:\$NET_LAN\t\$FW' $dir/rules
sed -Ei '/^\?SECTION NEW/a # LAN WEBMIN ACCESS' $dir/rules
sed -Ei '/^\?SECTION NEW/a SSH(ACCEPT)\t$Z_LAN:\$NET_LAN\t\$FW' $dir/rules
sed -Ei '/^\?SECTION NEW/a # LAN SSH ACCESS' $dir/rules
sed -Ei '/^SSH\(ACCEPT\)\s*[$]Z_LAN\:[$]NET_LAN\s*[$]FW/a # ADMIN SSH ACCESS' $dir/rules
sed -Ei '/^[#]\s*ADMIN\s*SSH\s*ACCESS/a SSH(ACCEPT)\t$Z_ADM:$NET_ADM\t$FW' $dir/rules
sed -Ei '/^SSH\(ACCEPT\)\s+[$]Z_ADM\:[$]NET_ADM\s+[$]FW/a # ADMIN WEBMIN ACCESS' $dir/rules
sed -Ei '/^[#]\s*ADMIN\s*WEBMIN\s*ACCESS/a Webmin(ACCEPT)\t$Z_ADM:$NET_ADM\t$FW' $dir/rules
sed -Ei '/^\?SECTION NEW/a Webmin(ACCEPT)\t$Z_LAN6:\$NET_LAN6\t\$FW' $dir/rules
sed -Ei '/^\?SECTION NEW/a # LAN WEBMIN ACCESS' $dir/rules
sed -Ei '/^\?SECTION NEW/a SSH(ACCEPT)\t$Z_LAN6:\$NET_LAN6\t\$FW' $dir/rules
sed -Ei '/^\?SECTION NEW/a # LAN SSH ACCESS' $dir/rules
sed -Ei '/^SSH\(ACCEPT\)\s*[$]Z_LAN6\:[$]NET_LAN6\s*[$]FW/a # ADMIN SSH ACCESS' $dir/rules
sed -Ei '/^[#]\s*ADMIN\s*SSH\s*ACCESS/a SSH(ACCEPT)\t$Z_ADM6:$NET_ADM6\t$FW' $dir/rules
sed -Ei '/^SSH\(ACCEPT\)\s+[$]Z_ADM6\:[$]NET_ADM6\s+[$]FW/a # ADMIN WEBMIN ACCESS' $dir/rules
sed -Ei '/^[#]\s*ADMIN\s*WEBMIN\s*ACCESS/a Webmin(ACCEPT)\t$Z_ADM6:$NET_ADM6\t$FW' $dir/rules
sed -Ei 's/^[#]\s*(fail_interval\s*=\s*).*/\11500/' /etc/security/faillock.conf
sed -Ei 's/^[#](timeout).*/\1 9/g' /boot/efi/loader/loader.conf
sed -Ei 's/^[#](console-mode).*/\1 auto/g' /boot/efi/loader/loader.conf
sed -i '/^#*\s*editor\s\+\(no\|yes\)/s//editor no/; $a editor no' /boot/efi/loader/loader.conf
sed -Ei "s|^(BOOTDISK=).*|\1${disk}|" /etc/default/chkboot
sed -Ei "s|^(BOOTPART=).*|\1${bootpart}|" /etc/default/chkboot
sed -Ei "s|^(BOOTDIR=).*|\1${bootdir}|" /etc/default/chkboot
J’ai refait un test d’installation avec la date de la modification du fichier et ensuite une fois démarré, je regarde la date avec stat. Et j’ai un écart de deux secondes.
Sauf qu’en me callant sur les logs, à l’heure du stat, il n’y a pas de modifications liées à .bashrc.
est-ce que ces comparaisons de timestamp sont fiables?
L’hypothèse de fran.b me semble intéressante, est-ce que tu as la possibilité de modifier ton script de postinst pour copier ton /root/.bashrc avant et après le sed ?
par exemple
```
if [ -f /root/.bashrc ]; then
sed -i.before ‹ s/32m/31m/g › /root/.bashrc
cp /root/.bashrc /root/.bashrc.after
else
printf ‹ %s\n › " - Erreur: le fichier /root/.bashrc n’existe pas"
fi
```