web-dev-qa-db-fra.com

script shell pour commenter ou décommenter une ligne - test

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.

2
Kylar Stern

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).

3
steeldriver