小编Taf*_*afT的帖子

如何编写GNU Screen脚本以启动在其中运行的程序,以便它不会在程序完成时退出会话?

如何编写GNU Screen脚本以启动在其中运行的程序,以便在程序完成时它不会退出会话?

我想作为一个守护进程运行一个交互式程序,如果我手动启动屏幕,然后在其中启动该程序,一切正常,我想要的.如果程序退出或崩溃,屏幕会话仍然存在,我可以去看看它刚刚发生了什么.但是,如果我使用简单的屏幕启动启动程序,那么它会在屏幕内运行,但是当程序退出时,屏幕会话结束并且程序的任何输出都会丢失.

所以screen –dmS serverName serverApplication对我的方案不起作用.我确实想过制作一个启动我要运行的程序的脚本然后永远睡觉,然后我可以在屏幕的同时启动脚本并且应该得到我想要的效果但是它似乎是一种不整洁的做事方式我相信一定有更优雅的东西.

我已经阅读了很多屏幕教程并在手册页中进行了搜索,但没有任何内容可以作为正确的方法来实现.我尝试过-X但是这是用于屏幕命令,而不是用于在屏幕会话中运行命令...任何建议都将非常感激; 如果有更好的脚本编写工具,我甚至乐意使用除GNU Screen之外的其他东西,但请尽可能给我一个例子.

(旁注:我将运行的两件事是一个minecraft_server和一个mythtv_backend.我的计划是通过一些ruby/bash脚本从启动时的chron作业启动它们)

daemon gnu-screen

24
推荐指数
1
解决办法
1万
查看次数

为什么 git 提交的建议行长度为 50(摘要)和 72(正文)?

确切的数字有一些变化,但一般来说,提交消息的第一行和后续行长度有推荐长度或最大长度。消息正文的常见字符数似乎最多为 72 个字符,进一步建议限制为 50 个字符。

这些或其他常见的 git 提交行限制的原因是什么?

我听说 72 个字符的限制与 RFC 2045 中定义的建议电子邮件宽度限制 76 有关:

(5)(软换行符)Quoted-Printable 编码要求编码行的长度不超过 76 个字符。

git 函数在生成电子邮件时会向提交消息添加 4 个字符,这会要求提交行短于电子邮件限制。反过来,我知道电子邮件字符限制与旧终端系统的 ~80 个字符限制有关。

如果这确实解释了 72 个字符的限制,那么 50 个字符的限制从何而来? Subject:只有 9 个字符,因此在 50 之前添加只会得到 59。也许我们然后添加常用的 7 个字符缩写提交哈希 ID 和一个空格,这给了我们 67,还有 5 个备用字符。

git commit-message git-commit

12
推荐指数
1
解决办法
5001
查看次数

我如何在 git 中知道一个分支是否已经重新建立在 master 上?

这与如何在 git 中知道分支是否已经合并到 master非常相似但是是关于检查重新定位的代码。在我目前正在处理的存储库中,似乎有一些功能分支在将更改重新定位到 master 之后被搁置了。在删除分支之前检查是否已完成的最佳方法是什么?

该分支上的大多数建议都建议使用分支上最后一次更改的 SHA id 密钥来检查其在 master 中的存在。我可以看到这是确保合并的最佳方法,但是当您重新设置此 SHA 时,此 SHA 已更改。

我有一个我也会发布的答案,但我想知道人们是否认为有更好的选择。

git git-rebase branching-and-merging

10
推荐指数
1
解决办法
4448
查看次数

如何在Eclipse中再次显示下划线?

将我的工作站从Ubuntu 14.04升级到Ubuntu 16.04后,我发现我的C和C++代码中的所有下划线_字符都是Eclipse编辑器看不到的.这意味着function_nameClass_Name开始显示为function nameClass Name; 虽然基于语法突出显示和粘贴到gedit的结果,_字符仍然清晰存在.

eclipse ide text-editor

10
推荐指数
2
解决办法
6873
查看次数

如何配置Jenkins以构建除我排除的几个分支之外的所有分支?

我们在git中有一些代码,我开始设置Jenkins来抓住我们的分支并尝试编译.自从他们最后一次建造以来,似乎有些分支机构可能已经开始腐烂,因为它们未能完成制造.

我想建立所有找到的分支,除了排除的列表.詹金斯有可能吗?这将让我开始运行,然后在我尝试修复它们时再回来启用更多分支.

到目前为止我尝试过的

前瞻性的正则表达式

看看'Git> Branches to build'选项我希望我可以用以下代码替换默认的'**'通配符:使用http://rubular.com/进行一些挖掘和双重检查表明以下可能会做我想要的.

:^(?原点/排除\ - 这个\分枝\ .v1 |原点/排除\ - 这个\分枝\ -too.v2)(\ S +)

现在假设正则表达式引擎在后台运行.我希望它可以理解前瞻,但如果不能解释为什么这个方法失败了.它似乎构建了所有分支,包括我试图排除的分支.也许我只需要找一些调试?

在这里寻找类似的问题

我遇到了Jenkins/Hudson Build All Branches With Prioritization,似乎包含了一个可能的解决方案,其中一些添加了一个反向选项来分支匹配https://github.com/jenkinsci/git-plugin/pull/45听起来像我需要的.可悲的是,这似乎不是我所拥有的詹金斯版本,这很奇怪,因为2011年很久以前.

我正在使用的系统

Ubuntu LTS 14.04.詹金斯诉.1.611.用于制作C/C++代码的GNU工具链.

regex git jenkins

9
推荐指数
2
解决办法
1万
查看次数

为什么yocto bblayers.conf文件使用绝对路径?

Yocto计划允许在大多数的配置文件,但没有内使用相对路径的./build/conf/bblayers.conf文件.什么是阻止使用的任何东西,但对于绝对路径的原因BBLAYERSBBLAYERS_NON_REMOVABLE变量?

我查看了yocto 2.0版(当前版本)的BitBake用户手册,但这并没有解释推理.我还检查了一些较旧的手动版本,但在谈论bblayers.conf文件或BBLAYERS变量时似乎没有提到推理.同样的文件还包含BBPATH = "${TOPDIR}"至少动态分配的文件,而不是远离根yotco目录.

我最好的猜测是bblayers.conf文件特定于它正在运行的系统.这将使它不适合通过源代码控制在开发人员之间共享,绝对路径会强制人们在收到副本时编辑文件.这似乎不是一个很好的理由,因此这个问题.

configuration-files absolute-path bitbake yocto

8
推荐指数
3
解决办法
5168
查看次数

如何在 Python 中将自定义信息保存到 PNG 图像文件?

我想在 Python 中打开一个 PNG 图像,向其中添加一些自定义数据,保存图像文件,稍后再次打开它以检索数据。我在 Python 3.7 中工作。我更喜欢使用 PNG 图像格式,但如果没有其他选择,可以移动到另一种格式。

在更新 PNG 标准以允许将自定义数据存储在其中之前,我已经阅读了许多过时的答案和文章。我想要一个关于今天(2019 年 10 月)可用内容的答案,或者当然,如果启用了一些有用的东西,将来会接受更新的答案。搜索此类特定问题真的很难,因为“save”、“png”、“python”、“info”都是非常通用的术语。


我可以使用 Pillow(目前为 6.2.0)检索一些数据。我无法解决的是如何将更多的 exif 数据存储到 png 中。

from PIL import image
targetImage = Image.open("pathToImage.png")
targetImage.info["MyNewString"] = "A string"
targetImage.info["MyNewInt"] = 1234
targetImage.save("NewPath.png")
Run Code Online (Sandbox Code Playgroud)

当我保存时,上面的信息会丢失。我看过一些使用文档,targetImage.save("NewPath.png", exif=exif_bytes)但只适用于 exif 格式的数据。我查看了piexifpiexif2包,但它们要么只支持 JPEG,要么不允许自定义数据。

我不介意信息是否以 iTXt、tEXt 或 zTXt 块的形式存储在 PNG 中。有关格式的说明,请参阅https://dev.exiv2.org/projects/exiv2/wiki/The_Metadata_in_PNG_files


我对 Python 很陌生,所以如果我遗漏了文档中一些经验丰富的编码人员会识别的明显内容,我深表歉意。如果解决方案已经存在,我真的不想重新发明轮子。

python png exif metadata

8
推荐指数
1
解决办法
4294
查看次数

make clean、make clobber、make distclean、make mrproper 和 make realclean 之间有什么区别?

我并不总是写 make 文件,但是当我这样做时,我喜欢尝试把它们写好。试图使界面与其他开发人员可能期望的一致总是很困难的。我正在寻找的是所有常见的 make something clean (GNU) make 目标的摘要。

常见的清洁目标有哪些?

每个目标通常什么时候使用?

每个目标与其他目标相比如何?


我曾使用make clean,make clobbermake mrproper之前的系统。那些变得越来越极端;make clean只整理临时文件,make clobber摆脱大部分配置,make mrproper几乎回到刚刚签出的状态。这是正常的秩序吗?应该make mrproper始终删除生成的二进制文件和共享库以进行部署吗?

阅读建议将make distclean事情整理到准备制作分发包的程度。我想这会留下一些自动生成的版本标记文件、文件清单和共享库,但可能会删除您不想存档的临时文件?

make realclean当我在GNU MakeGoals 手册页上看到它时,它对我来说是全新的。正如它列出的那样distcleanclobber我猜它有类似的效果。我是否从未遇到过它,因为它是一个历史文物,或者只是我必须从事的一组项目的特定内容?


抱歉,这有点啰嗦。我找到了将一个目标与另一个目标进行比较的各种问题和答案,但似乎没有一个可以很好地概述。

packaging makefile compilation code-cleanup gnu-make

6
推荐指数
1
解决办法
6145
查看次数

在SonarQube中,“覆盖线”和“未覆盖线”度量之间的含义有何不同?

我正在SonarQube分析过的C ++项目的“度量”选项卡中查看“覆盖率”报告。在该页面上,我的摘要信息如下:

SonarQube覆盖范围概述

“覆盖线”和“未覆盖线”指标之间有什么区别?

我查看了sonarqube网站的“度量标准定义”页面,但是那里的两个条目对我没有帮助。

要覆盖的行-单元测试可以覆盖的代码行数(例如,空白行或完整的注释行不视为要覆盖的行)。

未覆盖的行 -单元测试未涵盖的代码数。

读起来,我希望未覆盖的行数比要覆盖的行数多,因为前者可能包括空行。如果sonarqube有点理解代码,那么它也可能会从“单元测试可能涵盖”数字中排除异常处理。

给定的数字显然是相反的,所以我一定不能正确理解含义。


我有一些作为CI系统一部分运行的单元测试,并且使用lcov和gcov编译了它们的代码覆盖率。lcov数据通过genhtml传递,以生成单独的覆盖率报告,该报告目前在某些情况下提供数据,因此我可能会遇到部分配置错误的问题,这增加了混乱。

unit-testing code-coverage gcov lcov sonarqube

6
推荐指数
1
解决办法
2553
查看次数

如何在保留符号链接的同时在多阶段 Docker 构建的阶段之间复制库文件?

我有一个 Dockerfile,它分为两阶段多阶段 docker 构建。第一阶段生成一个基本的 gcc 构建环境,其中编译了许多 C 和 C++ 库。第二阶段使用该COPY --from=命令将库文件从第一阶段复制/usr/local/lib/libproto*到当前图像的。

我看到的问题是第一个图像包含从通用库文件名到特定版本文件名的符号链接。AFAIK 这是 Debian 和许多其他 Linux 系统中的常见做法。Docker 的COPY命令似乎不理解符号链接,因此制作了两个完整的库文件副本。这会导致更大的 Docker Image 大小和来自后续apt-get命令的警告到ldconfig: /usr/local/lib/libprotobuf.so.17 is not a symbolic link.


我的特定文件目前看起来像:

#Compile any tools we cannot install from packages
FROM gcc:7 as builder
USER 0
RUN \
  apt-get -y update && \
  apt-get -y install \
    clang \
    libc++-dev \
    libgflags-dev \
    libgtest-dev
RUN \
  # Protocol Buffer & gRPC
  # install protobuf …
Run Code Online (Sandbox Code Playgroud)

c++ shared-libraries docker dockerfile docker-multi-stage-build

5
推荐指数
1
解决办法
3259
查看次数

在 GUI 上查看时,如何折叠我的 GitLab CI 作业日志的一部分?

我有几个 GitLab CI 作业需要一段时间才能运行。我已经使用 before_script 和 after_script 功能将一些工作分成几个部分。如果可能的话,我想在作业输出中添加更多可折叠的日志部分。

GitLab 提供的可折叠作业输出示例

我目前可以在 GitLab 网络界面上查看的作业部分包括显示的每个可折叠部分的时间(见上图)。如果我能为创建的每个新部分获得更精细的时间安排,那将是一个不错的奖励,但这不是必需的。

我目前正在使用 GitLab 社区版 12.6.4


我尝试查看GitLab CI/CD 管道配置参考,但在日志输出中找不到定义您自己的子部分的注释。我发现了一个请求可折叠作业日志的问题,其中确实包含一些建议的添加它的解决方法,但由于该问题已关闭,我认为可能有比弄乱 DOM 更官方的方法。我宁愿回答“它不受支持”,然后通过对将来可能会中断的输出做任何太奇怪的事情来为我自己做一次抢劫。

gitlab-ci

5
推荐指数
2
解决办法
709
查看次数

ant找不到Android项目的pre_setup.xml

我已经开始玩Android编程了,几个星期前我得到了一个基本的项目设置,并遵循杂志的教程.我知道我设法让基本的蚂蚁编译工作但现在我回到它失败了一个有点奇怪的消息:

$ ant debug
Buildfile: /home/taft/android_code/countdown/build.xml

BUILD FAILED
/home/taft/android_code/countdown/build.xml:37: Cannot find /home/pete/android-sdk-linux_x86/tools/ant/pre_setup.xml imported from /home/taft/android_code/countdown/build.xml

Total time: 0 seconds

taft是我的用户名; 我在〜/ bin /中安装了sdk,我的路径设置合理(我认为):

$ echo $PATH
/home/taft/bin:/home/taft/bin/android-sdk-linux_x86/tools:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/taft/bin/android-sdk-linux_x86/platform-tools/

我没有皮特用户,我不知道从哪里获得这条路径; build.xml的第36和37行如下所示:

<!-- Required pre-setup import -->
<import file="${sdk.dir}/tools/ant/pre_setup.xml" />
Run Code Online (Sandbox Code Playgroud)

现在我猜测sdk.dir应该自动填充......但我不知道是什么?还有其他人遇到过这个问题,或者对我接下来要尝试的内容有什么建议吗?

ant android compiler-errors android-2.2-froyo

4
推荐指数
1
解决办法
4197
查看次数

如何在 Go 中编写使用 -short 标志的测试,它可以与 -benchmark 标志结合使用吗?

如何使用-short中给出的标志go test -short

是否可以组合-short-benchmark标志?

我对 Go 语言还很陌生,但我正在努力让自己适应它的一些常见做法。其中一部分是尝试确保我的代码不仅以系统go test工作的方式添加了单元测试,而且go test -benchmark还以有用的方式运行。

目前我有一个基准测试,其中包括一系列基于不同大小的输入数据的子测试。运行 15 个排列需要很长时间,因此最好能提供缩短测试时间的选项。

我计划编写的下一组测试可能包括一系列数据输入示例。我希望运行其中的一个可以作为短期测试的健全性检查,但如果可以选择在较长(或正常)的测试运行中运行多个,那就太好了。

当我查看GoLang 文档中的测试标志时,它说“告诉长时间运行的测试以缩短其运行时间”。这听起来像是我想要的,但我无法弄清楚如何在测试代码中选取这个标志。

benchmarking unit-testing go

3
推荐指数
1
解决办法
7612
查看次数