假设我有一个composer.json锁定依赖项的文件:
{
"require" : {
"zendframework/zendframework" : "2.4.2"
},
"require-dev": {
"phpunit/phpunit": "4.6.6"
}
}
Run Code Online (Sandbox Code Playgroud)
我想这样做是因为想要手动更新依赖项,所以我不会遇到构建失败或其他开发人员遇到我没有的问题的情况,因为Composer安装了不同版本的软件包.
是否有一种很好的方法可以使用Composer列出锁定包的所有较新版本,也许类似于composer discover我获得输出的地方:zendframework/zendframework锁定版本2.4.2(2.4.*或其他),但有版本2.5.0,2.5.1和2.6.0可用*?
现有的任何命令都能提供这种信息吗?
基本上,我更关注向我展示的新版本,因此我可以知道手动更新的依赖项.承诺composer.lock不是真正的解决方案,因为这不会告诉我要更新的内容(并且我composer.json被锁定在特定版本,因此composer.lock无论如何都不会有所不同).
如何更改Homebrew将在何处安装软件包?这有可能吗?我尝试在中手动移动已安装的文件夹/usr/local/Cellar,但该位置的动态链接“硬连线”。
我在Wine(wine my_app.exe)下运行我的应用程序,我想以编程方式或从脚本中与它进行交互.
所以我正在运行winedbg并附加到该过程:
$ winedbg
Wine-dbg>info process
00000008 3 'terminal.exe'
Wine-dbg>attach 8
0xf7709c0e __kernel_vsyscall+0xe in [vdso].so: int $0x80
Run Code Online (Sandbox Code Playgroud)
但我不确定下一步该做什么?
基本上我想向我的应用程序发送一些键盘或鼠标信号(旨在选择一个复选框并单击下一步按钮).
是否有可能使用葡萄酒调试器?
我的目标是自动执行此过程,以便从脚本安装应用程序而无需任何用户交互.或至少知道如何做到这一点.
我知道有xdotool工具可以很容易地从命令行伪造鼠标和键盘的输入,但是它有点儿麻烦,所以我想学习如何从调试器中做到这一点.
我对Laravel 5和PHPUnit有一些奇怪的问题.当我试图模仿Laravel的外观(例如Auth,View,Mail)时,我总是得到这个例外:
Mockery\Exception\InvalidCountException:方法发送("emails.register",数组('用户'=''对象(MCC\Models\Users\User)',),对象(Closure))来自Mockery_0_Illuminate_Mail_Mailer应该被正确调用1次但是叫了0次.
我有"should be called exactly 1 times but called 0 times."部分问题.这是我的测试代码:
public function testSendEmailToNewUserListener()
{
$user = factory(MCC\Models\Users\User::class)->create();
Mail::shouldReceive('send')
->with(
'emails.register',
['user' => $user],
function ($mail) use ($user) {
$mail->to($user->email, $user->name)
->subject('Thank you for registering an account.');
}
)
->times(1)
->andReturnUsing(function ($message) use ($user) {
dd($message);
$this->assertEquals('Thank you for registering an account.', $message->getSubject());
$this->assertEquals('mcc', $message->getTo());
$this->assertEquals(View::make('emails.register'), $message->getBody());
});
}
Run Code Online (Sandbox Code Playgroud)
我放弃了dd($message),因为我想了解有关返回值的详细信息(看起来如何$message->getTo()).
我的TestCase类:
<?php
/**
* Provides default values for functional tests.
*
* …Run Code Online (Sandbox Code Playgroud) "$@"似乎让,消失。例如
param="123 1,2"
set echo $param
"$@"
Run Code Online (Sandbox Code Playgroud)
这将回显“123 1 2”而不是“123 1,2”,但在某些情况下,需要作为命令的值。
这似乎与bash版本有关,在bash 4.1.2中,结果是正确的,但在4.2.46中,逗号丢失了。
编辑:
简而言之,也许应该nice归咎于:
我unset IFS这样做了,在终端中,我给出的测试用例工作正常,但与我的脚本无关。
我实际上正在编写一个初始化脚本,我检查了action()中的函数/etc/init.d/functions,并添加了一些调试代码:
echo "$@" # added by me
unset IFS # added by me
"$@" && success $"$STRING" || failure $"$STRING"
Run Code Online (Sandbox Code Playgroud)
回显的命令是正确的( nice -n -10 ovs-vswitchd ... --socket-mem 1024,1024),但结果是psnice 实际执行的命令变成了ovs-vswitchd ... --socket-mem 1024 1024。
我开始想也许这是nice罪魁祸首。
我在Jenkins(v2.7.1)中完成了Pipeline作业,在这里我要打印多行字符串参数(Params)的每个元素,每行3个字符串:Foo,Bar,Baz作为输入。
因此,我尝试了以下语法(使用split和each):
Params.split("\\r?\\n").each { param ->
println "Param: ${param}"
}
Run Code Online (Sandbox Code Playgroud)
但是它失败了:
java.lang.UnsupportedOperationException:尚不支持在CPS转换的闭包上调用public static java.lang.Object org.codehaus.groovy.runtime.DefaultGroovyMethods.each(java.lang.Object,groovy.lang.Closure)(JENKINS-26481); 封装为@NonCPS方法,或在org.jenkinsci.plugins.workflow.cps.GroovyClassLoaderWhitelist.checkJenkins26481(GroovyClassLoaderWhitelist.java:90)上使用Java样式的循环
建议使用@NonCPS方法封装,或使用Java样式的循环。
所以我试着用@NonCPS方法封装:
@NonCPS
def printParams() {
Params.split("\\r?\\n").each { param ->
println "Param: ${param}"
}
}
printParams()
Run Code Online (Sandbox Code Playgroud)
但是它失败了:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:不允许脚本使用staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods println groovy.lang.Closure java.lang.Object
如果没有该功能(按照第一个示例),则@NonCPS在开始时添加它会抱怨意外的token。
我还尝试了使用for运算符建议的Java样式语法(类似于here):
String[] params = Params.split("\\r?\\n")
for (String param: params) {
println "Param: ${param}"
} …Run Code Online (Sandbox Code Playgroud) 基本上这是我的角色
---
- name: pip install mimodd {{ version }}
pip:
name: mimodd
version: "{{ version }}"
virtualenv: "{{ apps_dir }}/mimodd-{{ version }}"
virtualenv_python: python3.5
virtualenv_site_packages: yes
tags: mimodd
- file:
dest: "{{ modules_bio }}/mimodd-{{ version }}"
state: directory
mode: 0755
tags: mimodd
- name: mimodd {{ version }} module definition
template:
src: sw-module.lua.j2
dest: "{{ modules_bio }}/mimodd/{{ version }}.lua"
owner: "{{ main_guy }}"
mode: 0644
with_items:
- dir: 'mimodd-{{ version }}'
help_text: 'loads mimodd pipeline'
append: true
tags: mimodd …Run Code Online (Sandbox Code Playgroud) 我想传递给脚本的所有参数并执行。
例如,给定execute.ps1脚本:
Invoke-Expression $($args[0])
Run Code Online (Sandbox Code Playgroud)
我可以跑:
.\execute.ps1 hostname
myhostname
Run Code Online (Sandbox Code Playgroud)
与此脚本的两个参数相同:
Invoke-Expression "$($args[0]) $($args[1])"
Run Code Online (Sandbox Code Playgroud)
并通过以下方式执行它:
.\execute.ps1 echo foo
foo
Run Code Online (Sandbox Code Playgroud)
如何使脚本通用以支持未知数量的参数?
例如:
.\execute.ps1 echo foo bar buzz ...
Run Code Online (Sandbox Code Playgroud)
我尝试了以下失败的组合:
Invoke-Expression $args
Run Code Online (Sandbox Code Playgroud)
调用表达式:无法将“System.Object[]”转换为参数“Command”所需的类型“System.String”。不支持指定的方法。
Invoke-Expression [system.String]::Join(" ", $args)
Run Code Online (Sandbox Code Playgroud)
调用表达式:找不到接受参数“System.Object[]”的位置参数。
Invoke-Expression $args.split(" ")
Run Code Online (Sandbox Code Playgroud)
调用表达式:无法将“System.Object[]”转换为参数“Command”所需的类型“System.String”。不支持指定的方法。
Invoke-Expression [String] $args
Run Code Online (Sandbox Code Playgroud)
调用表达式:找不到接受参数“System.Object[]”的位置参数。
所以,我在一个字符串中有这个URL:
http://www.domain.com/something/interesting_part/?somevars&othervars
Run Code Online (Sandbox Code Playgroud)
在PHP中,我怎么能摆脱所有interesting_part呢?
我有两个文件.
file1.txt:
Afghans
Africans
Alaskans
...
Run Code Online (Sandbox Code Playgroud)
其中file2.txt包含网页上wget的输出,所以这是一个很大的混乱,但确实包含了第一个列表中的许多单词.
Bashscript:
cat file1.txt | while read LINE; do grep $LINE file2.txt; done
Run Code Online (Sandbox Code Playgroud)
这没有按预期工作.我想知道为什么,所以我在循环中回显了$ LINE变量并添加了一个睡眠1,所以我可以看到发生了什么:
cat file1.txt | while read LINE; do echo $LINE; sleep 1; grep $LINE file2.txt; done
Run Code Online (Sandbox Code Playgroud)
终端中的输出看起来像这样:
Afghans
非洲人
阿拉斯加人
阿尔巴尼亚人
美国人
grep:中文:没有这样的文件或目录
:没有这样的文件或目录
阿拉伯人
阿拉伯人
阿拉伯人/东印度人
:没有这样的文件或目录
阿根廷
亚美尼亚人
亚洲
亚洲印第安人
:没有这样的文件或目录
file2.txt:亚洲火影忍者
. ..
所以你可以看到它终于找到了"亚洲"这个词.但为什么会说:
没有相应的文件和目录
?
有什么奇怪的事情或我在这里错过了什么吗?