Essayer de supprimer un signe #
d'une seule ligne d'un fichier. La ligne est actuellement
#/usr/bin/tvservice -o
if [[ '$grep tvservice /etc/rc.local' =~ ^# ]] ;
then sed -i '/^#.* tvservice /s/^#//' /etc/rc.local ;
else echo 1 fi
Essayer de tester si cette commande fonctionnera avant que je ne l'ajoute à un script. Quand je le lance, je reçois un symbole >
et je dois arrêter l'exécution avec Ctrl+C
Est-ce que je ne passe pas une chaîne à grep
correctement ou quoi? Je suis assez nouveau pour cela.
Je vous suggère de commencer par tester sans le -i
de sed - ou d'utiliser une copie locale du fichier rc.local
.
Vous n'avez pas besoin de pour tester la présence de la chaîne, mais si c'est le cas, la méthode correcte pour remplacer les propriétés de grep output serait "$(grep tvservice /etc/rc.local)"
- la façon dont vous l'avez écrit teste la chaîne littérale $grep tvservice /etc/rc.local
Cependant, une meilleure façon, à mon humble avis, serait de grep pour l’ensemble du motif et d’utiliser directement le statut de sortie de grep, en évitant le test de regex Shell:
if grep -q '^#.*tvservice' /etc/rc.local; then
sed -i '/^#.*tvservice/ s/^#//' /etc/rc.local
else
echo 1
fi
(J'ai supprimé les espaces autour du motif, car votre exemple de texte ne les contient pas).