如果需要,我必须创建一个查看/etc/gdm/Xsession
并添加-a ! -x "$HOME/.xsession"
的脚本。
1)我想检查文件是否已包含添加的部分。 使用grep,我尝试了这个:
if ! grep -q '-a ! -x "$HOME/.xsession"' "$xsessionScript"
当grep尝试解释简单引号之间的所有内容时,它不起作用。
2)如果我发现该文件未被修改,我想将-a ! -x "$HOME/.xsession"
附加到if语句:if [ "$1" != "default" -a "$1" != "custom" ]
,以便它看起来像:
if [ "$1" != "default" -a "$1" != "custom" -a ! -x "$HOME/.xsession" ]
我尝试使用sed:
sed -i.bck '/\"$1" != "default" -a "\$1" != "custom"/a -a ! -x "$HOME/.xsession"'
但这会创建一个新行,而不是在" custom"之后添加字符串。
请帮助我!
非常感谢:)
顺便说一句,我在CentOs 6.6.1,sed 4.2.1,bash 4.1.2
编辑:
我要编辑的文件如下所示:
[...]
case $# in
[...]
case "$1" in
[...]
*)
if [ "$1" != "default" -a "$1" != "custom" ]; then # I want this line to become:
====> # if [ "$1" != "default" -a "$1" != "custom" -a ! -x "$HOME/.xsession" ]
exec $CK_XINIT_SESSION $SSH_AGENT /bin/sh -c "exec -l $SHELL -c \"$1\""
fi
;;
esac
esac
fi
[...]
答案 0 :(得分:0)
您可以使用grep 'a | -x "$HOME/.xsession"' file.sh > /dev/null
检查它是否包含此测试。如果没有,grep将返回1.
if [ "$?" -eq 1 ]; then echo '-a ! -x "$HOME/.xsession"' >> /etc/gdm/Xsession
应该这样做。
if检查grep是否发现了什么;如果它没有回声将文本附加到Xsession文件
如果您可以在执行脚本后添加Xsession外观以及预期效果的示例,我可以尝试给您一个示例。
更新:试试这个
if [ "$1" != "default" -a "$1" != "custom" -a ! $(grep 'a | -x "$HOME/.xsession"' "$xsessionScript")]
答案 1 :(得分:0)
#!/bin/bash
# I use variables for clarity
main='"\$1" != "default" -a "\$1" != "custom" '
appendix='-a ! -x "\$HOME/.xsession" '
sed -i.bck -r "s|($main)($appendix)?|\1$appendix|" input.txt
sed 's|||'
构造与sed 's///'
。s|($main)($appendix)?|
- 意思是:模式必须包含$main
部分,但$appendix
部分是可选的。 $appendix
可以存在,也可以不存在。|\1$appendix|
- 将模式替换为$main
(为简洁起见,我使用\1
捕获组而不是$main
变量)+ $ appendix。所以,我们得到了理想的行为:
main
部分,则会将其替换为main + appendix
。main + appendix
,则会将其替换为相同的行。换句话说,它保持不变。<强>输入强>
[...]
case $# in
[...]
case "$1" in
[...]
*)
if [ "$1" != "default" -a "$1" != "custom" ]; then
exec $CK_XINIT_SESSION $SSH_AGENT /bin/sh -c "exec -l $SHELL -c \"$1\""
fi
;;
esac
esac
fi
[...]
<强>输出强>
[...]
case $# in
[...]
case "$1" in
[...]
*)
if [ "$1" != "default" -a "$1" != "custom" -a ! -x "$HOME/.xsession" ]; then
exec $CK_XINIT_SESSION $SSH_AGENT /bin/sh -c "exec -l $SHELL -c \"$1\""
fi
;;
esac
esac
fi
[...]