我正在尝试为脚本创建卸载程序。问题是在同一个文件中,我有其他命令执行的多个命令,因此我只需要获取该脚本的一部分即可。我用标签划分了那部分
#!/bin/bash
echo "other code"
# Other code
#test
tempCommandFile=$(mktemp)
function btmonTemp() {
rm -rf $tempCommandFile
}
echo "Uninstall process"
sudo launchctl unload -w /Library/LaunchDaemons/com.app.plist
sudo rm -rf /usr/local/paveljame/app
sudo rm -rf /Library/LaunchDaemons/com.app.plist
sudo rm -rf /var/log/script/app
echo "Finished"
echo '#!/bin/bash
tempFinisedFile=$(mktemp)
awk "/#test/{p=1;print}/#endtest/{p=0}!p" /usr/local/bin/script > $tempFinisedFile
cat $tempFinisedFile > /usr/local/bin/script
rm -rf $tempFinisedFile
rm -rf $tempCommandFile
' > $tempCommandFile
#endtest
sh $tempCommandFile
trap btmonTemp EXIT
运行脚本后,我得到了:
#!/bin/bash
echo "other code"
# Other code
#test
awk "/#test/{p=1;print}/#endtest/{p=0}!p" /usr/local/bin/script > $tempFinisedFile
awk "/#test/{p=1;print}/#endtest/{p=0}!p" /usr/local/bin/script > $tempFinisedFile
cat $tempFinisedFile > /usr/local/bin/script
rm -rf $tempFinisedFile
rm -rf $tempCommandFile
' > $tempCommandFile
#endtest
sh $tempCommandFile
trap btmonTemp EXIT
我做错了什么?
答案 0 :(得分:0)
您可以使用来测试代码
awk "/#test/{p=1;print}/#endtest/{p=0}!p" /usr/local/bin/script
输出两次显示awk
命令。为什么?
当找到#test
的行中的某处时,它将打印一行。
在与awk
的行中找到匹配项。
修复:添加^
:
awk "/^#test/{p=1;print}/^#endtest/{p=0}!p" /usr/local/bin/script