2016-11-03 4 views
0

Ich versuche, die bashrc eines Benutzers zu überprüfen, ob eine Zeile bereits existiert. Ich habe versucht, dies:grep bashrc eines anderen Benutzers für die Überprüfung der Variablen

if [ [ su - ${1} -c "cat ~/.bashrc | grep ${2} | wc -c | tr -d ' '" ] -gt 0 ] 
if [ su - ${1} -c "cat ~/.bashrc | grep ${2} | wc -c | tr -d ' '" ] 

1 $ wird ein Benutzername

2 $ die VarName ist

In exec

+ '[' su - user -c 'cat ~/.bahsrc | grep PATH | wc -c | tr -d '\'' '\''' ']' 
line xxx: [: too many arguments 

Ist es möglich, dass, wie dies zu tun? Muss ich Rückgabewerte verwenden (eigentlich $? = 0 für alle)?

Antwort

2

Wenn Sie überprüfen gerade, dass eine Linie vorhanden ist, gibt es keine Notwendigkeit wc oder tr oder irgendetwas anderes zu beteiligen; Dies sollte ausreichen:

if su - ${1} -c "grep -q '${2}' ~/.bashrc" ; then 
    echo line exists in file 
else 
    echo line does not exist in file 
fi 

Diese line exists in file, wenn der Inhalt von $2 gefunden werden in ~/.bashrc Echo wird.

um zu verstehen, was hier vor sich geht, denken Sie daran, dass die Syntax der if Anweisung ist (von der bash Manpage):

if list; then list; [ elif list; then list; ] ... [ else list; ] fi 

Wo list ein oder mehrere Befehle. In diesem Fall verwenden wir den Beendigungscode aus dem Befehl grep, um die "Wahrheit" des Ausdrucks zu bestimmen.

Verwandte Themen