据我所知,有两种方法可以在bash函数中创建局部变量:创建子shell或将每个变量声明为local.
例如:
# using local
function foo
{
local count
for count in $(seq 10)
do
echo $count
done
}
Run Code Online (Sandbox Code Playgroud)
要么
# using subshell
function foo
{
(
for count in $(seq 10)
do
echo $count
done
)
}
Run Code Online (Sandbox Code Playgroud)
显然,使用子shell的版本更易于编写,因为您不必关心将所有变量声明为本地(更不用说由getopts等工具创建/导出的(环境)变量).但我可以想象创建一个子shell有一个开销.
那么更好的方法是什么?有哪些优点/缺点?
我正在尝试使用QTestLib为GUI应用程序编写单元测试.问题是其中一个插槽使用创建模式对话框exec() ,我发现没有可能与对话框进行交互.
创建对话框的插槽连接到QAction.所以第一个问题是当我在测试中触发QAction时测试阻塞,因为这会导致调用exec().因此,我尝试创建一个执行交互的QThread.但是,这没有帮助.
我已经尝试过的事情(都是在"交互助手"线程中执行的):
QTest::keyClicks()
QCoreApplication::postEvent()
exec()返回之前不会到达.QMetaObject::invokeMethod()
postEvent()不起作用.所以问题是:有没有办法以编程方式与使用该exec()方法打开的模态对话框进行交互?
编辑:实际上,方法3正在运行.问题是另一个问题:我将参数传递invokeMethod()给"交互助手"线程,由于某种原因,访问参数不起作用(我没有SEG错误,但它们只是空的).我想方法2也有效,我只是遇到与方法3相同的问题,但我没有测试过.
我试图在Doxygen文档中包含一个包含多行注释的代码示例.问题是C++预处理器将其解释*/为我的Doxygen注释的结尾,因此文件的语法被破坏了.
例如:
/*! \brief My Doxygen comment.
*
* \code
* myFunction() /* Some multi-line comment */
* \endcode
*/
Run Code Online (Sandbox Code Playgroud)
我已经尝试过适用于JavaDoc注释的建议:使用HTML实体对斜杠进行编码,如下所示:
* \code
* myFunction() /* Some multi-line comment */
* \endcode
Run Code Online (Sandbox Code Playgroud)
但这不起作用(我猜因为Doxygen不会替换代码部分中的HTML实体).
所以问题是:是否可以在代码示例中包含多行注释,如何才能完成?
如未记载的qmake中所述,我在qmake项目文件中声明了一个额外的编译器:
TEST = somefile.h
test_c.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}_1.cpp
test_c.input = TEST
test_c.commands = C:/somedir/some.exe /i ${QMAKE_FILE_IN} /o ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}_1.cpp
test_c.variable_out = SOURCES
test_c.name = MyTestC
QMAKE_EXTRA_COMPILERS += test_c
Run Code Online (Sandbox Code Playgroud)
这很好用.但我也想生成一个头文件.我可以轻松地创建第二个自定义工具来解析此文件(或文件,如果> 1将在TEST中),但我不想解析每个文件两次.我试过了:
test_c.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}_1.cpp \
${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}_2.cpp
Run Code Online (Sandbox Code Playgroud)
只是为了测试额外的编译器每次运行可以生成两个文件.我期待像" file somefile_2.cpp doesn't exist" 这样的错误,但项目编译没有错误,第二个输出文件被忽略.在Makefile somefile_2.cpp中不存在.
现在我想到两个变种:
创建一个额外的编译器来生成存档,其中所有需要的输出文件将立即保存.设置tool1.variable_out = TOOL_1_OUT并添加两个额外的编译器,toolN.input = TOOL_1_OUT只需"解压缩"存档文件(每个工具一个)并将它们附加到一些变量.
在这种情况下,每个输入文件将调用三次执行.这不是最佳的,但至少解析器每个文件只运行一次.
尝试.output_function选项.创建一个qmake函数,返回与.output现在相同的名称,但也附加第二个文件名HEADERS.
PS我使用的是MinGW x32 4.7,QtCreator 2.7.1,Qt 5.1.0,C++ 11.
需要访问远程存储库的所有git命令都会失败,并显示错误消息:
fatal: protocol error: bad line length character: Pass
Run Code Online (Sandbox Code Playgroud)
他们几天前曾经工作过.
尝试在sh第二步执行步骤node()失败.最小的例子:
node('windows') {
env.PATH = "C:\\some\\path;${env.PATH}"
// ...
}
node('linux') {
sh "echo 'Hello World!'" // this fails
}
Run Code Online (Sandbox Code Playgroud)
错误消息是:
nohup: failed to run command 'sh': No such file or directory
Run Code Online (Sandbox Code Playgroud)
在PATH环境变量设置正确为包含sh两个节点上命令.
为什么sh第二个节点上的步骤失败?