printf "2015-03-02|/home/user/.ssh/config\n2015-03-02|/home/user/Desktop/temp328\n" | awk -F\| 'if ( -f $2 ) { print $2}'
Run Code Online (Sandbox Code Playgroud)
或者
printf "2015-03-02|/home/user/.ssh/config\n2015-03-02|/home/user/Desktop/temp328\n" | awk -F\| '{if (system("test -f" $2)) print $2}'
Run Code Online (Sandbox Code Playgroud)
/home/user/.ssh/config\n2015-03-02 - 存在
/home/user/Desktop/temp328 - 已删除
我只想打印存在的文件,但此命令不起作用。
我们正在运行一个Zope服务器,最终有大量的Plone(4)站点.有时会出现扩展产品更新,需要重新安装才能获取配置文件设置中的更改,例如新内容类型.
手动,这意味着点击每个Plone网站portal_quickinstaller,勾选产品,按更新.如果我们谈论几十个网站,这是不太可行的,所以我试图自动化这个.基本上到目前为止,我有以下生活作为Zope根目录中的脚本(Python):
a = context.restrictedTraverse('/')
p = a['Plone']
print p.getSiteManager()
qi = p.restrictedTraverse('portal_quickinstaller')
print qi
qi.reinstallProducts('LinguaPlone')
Run Code Online (Sandbox Code Playgroud)
(简化;实际上我有一个更长的列表而不是单个Plone实例,我可能想重新安装更长的产品列表.)这会失败,并带有以下内容:
Module Products.CMFQuickInstallerTool.QuickInstallerTool, line 613, in uninstallProducts
Module Products.CMFQuickInstallerTool.InstalledProduct, line 272, in uninstall
Module Products.CMFQuickInstallerTool.InstalledProduct, line 351, in _cascadeRemove
AttributeError: 'BaseGlobalComponents' object has no attribute 'objectItems'
Run Code Online (Sandbox Code Playgroud)
从我到目前为止的调试尝试来看,BaseGlobalComponents是由Zope SiteManager返回的zope.component.getSiteManager.我如何说服快速安装程序选择正确的安装程序,即它所居住的Plone站点中的那个?
或者,我如何以一种对大型安装仍然模糊可行的方式自动重新安装产品?(ETA:我知道这不是你用cronjob自动做的事情,但我担心内部开发产品的更新是无法避免的.)
所以我正在为"MiniString"创建一个类,它只是对象MiniString的实例方法,每个MiniString都有一个char []实例变量.在测试我的方法时,我无法找到我的substring()方法出错的地方.有两个子字符串方法,其中一个采用int参数,另一个采用两个int参数.我一直在一个int参数方法上得到错误.substring方法应该返回一个新的MiniString,它由int参数指定的目标Ministring中的位置和目标MiniString的末尾之间的字符组成.我在JUnit Tester中遇到的错误如下:
java.lang.ArrayOutofBoundsException:22
at MiniString.substring(MiniString.java:141)
at MiniString.substring(MiniString.java:159)
Run Code Online (Sandbox Code Playgroud)
这是我的MiniString对象的构造函数:
private char[] miniscule;
MiniString(char[] array){
int i = 0;
miniscule = new char[array.length];
while (i < array.length){
miniscule[i] = array[i];
i++;
}
}
MiniString(String string){
int i = 0;
miniscule = new char[string.length()];
while (i < string.length()){
this.miniscule[i] = string.charAt(i);
i++;
}
}
Run Code Online (Sandbox Code Playgroud)
这是两个substring()方法的代码:
public MiniString substring(int start, int end){
int i = start;
if (end > start){
char[] temp = new char[end - start];
MiniString range = new MiniString(temp);
while …Run Code Online (Sandbox Code Playgroud)