<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>https://jackxiang.com/post//</link>
<title><![CDATA[[实践OK]bad substitution的原因是用了sh不是bash导致的，Dockerfile批量替换里面的内容，cp filename{,bak} , find /var/www/ -name file -exec cp {}{,.bak} ; 递归备份文件，大括号扩展:cp和mv搭配{,}在shell作用，cp  快速备份 bash{} 扩展。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Unix/LinuxC技术]]></category>
<pubDate>Sun, 02 Jul 2017 11:32:47 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	去掉没有用的扩展名：<br/>mv /home/pi/.config/autostart/my.desktop.bak /home/pi/.config/autostart/my.desktop的shell花括号扩展简写：<br/><textarea name="code" class="php" rows="15" cols="100">
root@raspberrypi:~# mv /home/pi/.config/autostart/my.desktop&#123;.bak, &#125;
root@raspberrypi:~# ls /home/pi/.config/autostart/my.desktop
/home/pi/.config/autostart/my.desktop
</textarea><br/><br/>拷贝新非后追加的文件名：<br/><textarea name="code" class="php" rows="15" cols="100">
cp -rf traefik-deploy&#123;,-hostnetwork&#125;.yaml
#ls traefik-deploy*
traefik-deploy-hostnetwork.yaml&nbsp;&nbsp;traefik-deploy.yaml
</textarea><br/><br/>用Sed进行Dockerfile批量替换里面的内容：<br/><textarea name="code" class="php" rows="15" cols="100">
for i in $(ls -1 */Dockerfile);do echo $i;sed&nbsp;&nbsp;-in &#039;s#/irdc/#/irdc_irdcops/#&#039; $i&#124;grep -i from;echo ; done
</textarea><br/>-i[SUFFIX], --in-place[=SUFFIX]<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;edit files in place (makes backup if SUFFIX supplied)<br/>-n, --quiet, --silent<br/><br/>这样感觉没有直接用shell 替换来得方便好写，如下：<br/>和Sed不一样，没有最后一个斜杠：<br/>$&#123;string/needreplace/placedstr&#125;<br/><br/>$ a=abcdefg123&nbsp;&nbsp;<br/>$ a=$&#123;a/123/456&#125;<br/>$ echo $a<br/>abcdefg456<br/>注意：不能是花括号里面有$,会报错：<br/><textarea name="code" class="php" rows="15" cols="100">
a=$&#123;$a/123/456&#125;
-bash: $&#123;$a/123/456&#125;: bad substitution
</textarea><br/><br/>bad substitution的原因是用了sh不是bash导致的：<br/>在文件头里加上：<br/>#!/bin/bash 替掉：#!/bin/sh<br/>sh -x test.sh第3行总出现bad substitution提示信息，这与linux shell使用的是/bin/sh，还是/bin/bash有关系。我的脚本中指定使用的是/bin/bash shell，但是我在调试的时候使用的是sh shell，因此调试时导致错误提示信息。<br/>原文链接：<a href="https://blog.csdn.net/u013516897/article/details/77965333" target="_blank">https://blog.csdn.net/u013516897/article/details/77965333</a><br/><br/><br/>实战：<br/><textarea name="code" class="php" rows="15" cols="100">
str=&quot;deploy/jackxiang.com-release1/tags/55f5d6c3&quot; 
echo $&#123;str/&#92;/tags&#92;//:&#125;
deploy/jackxiang.com-release1:55f5d6c3
</textarea><br/><br/>对docker tag 进行实践：<br/><textarea name="code" class="php" rows="15" cols="100">
 for i in $(cat deploy.txt ) ;do echo docker tag $i $&#123;i/deploy/deploy_irdcops&#125;;done
防止其它部分有deploy，缩小范围的替换：
for i in $(cat deploy.txt ) ;do echo docker tag $i $&#123;i/&#92;/deploy&#92;//&#92;/deploy_irdcops&#92;/&#125;;done
</textarea><br/>来自：https://jackxiang.com/post/9922/<br/><br/>先是打印出内容，然后再静默替换，然后再不区分大小写输入替换后的那行：echo filename&#124;grep -i from;<br/>xargs 的使用：<br/>echo nginx-1.14.2/Dockerfile&#124;xargs grep -i from<br/>FROM registry.qr.xxxx.net/irdc_irdcops/alpine:3.10.0<br/><br/><br/>要查找一个指定后缀文件里有没有一些指定字符串，显示出文件和行号等，还是用 xargs方便，如下：<br/><textarea name="code" class="php" rows="15" cols="100">
#find . -name Dockerfile &#124; xargs grep -n &quot;localtime&quot; 
./python-2.7.14/Dockerfile:18:COPY ./install/localtime /etc/
./php-7.1.6/Dockerfile:96:COPY ./install/localtime /etc/
./alpine-3.10.0/Dockerfile:7:COPY install/localtime /etc/
./java-1.7.0/Dockerfile:19:COPY ./install/localtime /etc/
./go-1.11.1/Dockerfile:4:COPY ./install/localtime /etc/
</textarea><br/>上面一句顶exec两句，如下：<br/><textarea name="code" class="php" rows="15" cols="100">
#find . -name Dockerfile -exec grep -r localtime &#123;&#125; &#92;;&nbsp;&nbsp;
COPY ./install/localtime /etc/
COPY ./install/localtime /etc/
COPY install/localtime /etc/
COPY ./install/localtime /etc/
COPY ./install/localtime /etc/

#find . -name Dockerfile -exec grep -l localtime &#123;&#125; &#92;; 
./python-2.7.14/Dockerfile
./php-7.1.6/Dockerfile
./alpine-3.10.0/Dockerfile
./java-1.7.0/Dockerfile
./go-1.11.1/Dockerfile
</textarea><br/><br/><br/>零.批量替换文件：<br/>find . -type f -exec sed -n &#039;s#S:&quot;Username&quot;=#S:&quot;Username&quot;=xiangdong#p&#039; &#123;&#125; &#92;;<br/><br/>一.<br/>find /var/www/ -name file -exec cp &#123;&#125;&#123;,.bak&#125; &#92;; 递归备份文件<br/><br/>1). <br/>cp filename&#123;,.bak&#125;<br/>quickly backup or copy a file with bash<br/><br/>2). <br/>目录会自动omit删除掉; 目录不会复制；<br/><br/>来自：https://www.douban.com/note/422847745/<br/><br/>二.<br/>cp filename&#123;,.bak&#125;<br/>这个命令是用来把filename备份成filename.bak的<br/>等同于命令<br/>cp filename filename.bak<br/>这里利用的是bash的brace expansion（大括号扩展）功能<br/>按照bash手册(man bash)所述<br/>bash支持&#123;a,b,c&#125;这样的扩展<br/>比如a&#123;d,c,b&#125;e会被扩展成ade ace abe<br/>所以<br/>filename&#123;,.bak&#125;被扩展成filename filename.bak也就好理解了<br/><br/>同理可得：<br/>tar cvfz leo&#123;-20170202.tgz,&#125;=tar cvfz leo-20170202.tgz leo<br/><br/>来自：http://leomars.blog.51cto.com/683246/1894566<br/><br/>三.<br/> cp filename&#123;,.bak&#125; //注意花括号边并没有空格，否则就不 是扩展了，变成拷贝为&#123;,.bak&#125;文件了。<br/>这个命令是用来把filename备份成filename.bak，等同于命令 <br/>cp filename filename.bak <br/><br/>这里利用的是bash的brace expansion（大括号扩展）功能， <br/>按照bash手册(man bash)所述： <br/>bash支持&#123;a,b,c&#125;这样的扩展，比如a&#123;d,c,b&#125;e 会被扩展成ade ace abe <br/>所以 <br/>filename&#123;,.bak&#125;被扩展成filename filename.bak也就好理解了 <br/>原文http://www.haw-haw.org/node/1507 <br/><br/>
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]bad substitution的原因是用了sh不是bash导致的，Dockerfile批量替换里面的内容，cp filename{,bak} , find /var/www/ -name file -exec cp {}{,.bak} ; 递归备份文件，大括号扩展:cp和mv搭配{,}在shell作用，cp  快速备份 bash{} 扩展。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>