我正在尝试grep用户的bashrc以检查一行是否已存在。 我试过这个:
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是用户名
$ 2是VarName
在exec中
+ '[' su - user -c 'cat ~/.bahsrc | grep PATH | wc -c | tr -d '\'' '\''' ']'
line xxx: [: too many arguments
有可能这样做吗?我是否需要使用返回值(实际上$? = 0
为所有)?
答案 0 :(得分:2)
如果您只是检查存在行,则无需涉及wc
或tr
或其他任何内容;这应该足够了:
if su - ${1} -c "grep -q '${2}' ~/.bashrc" ; then
echo line exists in file
else
echo line does not exist in file
fi
如果在line exists in file
中找到$2
的内容,则会回显~/.bashrc
。
为了帮助理解这里发生了什么,请记住if
语句的语法是(来自bash
手册页):
if list; then list; [ elif list; then list; ] ... [ else list; ] fi
其中list
是一个或多个命令。在这种情况下,我们使用grep
命令中的退出代码来确定表达式的“真实性”。