小编unh*_*mer的帖子

有没有一个很好的emacs模式来显示和编辑巨大的分隔符分隔文件?

我一直在搜索没有找到一个模式,使编辑巨大的制表符/逗号/冒号分隔文件很容易.我一直想要一种模式,确保列始终排列,就像组织模式表一样.我知道我可以轻松地将整个文件转换为组织模式表,然后在我完成后将其关闭,但是对于大文件来说这会变得非常慢,并且对于快速编辑很麻烦(还有发生的问题)如果一个字段包含一个垂直条).所以有人知道我可以使用的模式或内置函数/变量,以便我可以得到一个像这样的文件

col1\tcol2\tcol3
very long column1\tcol2\tcol3
Run Code Online (Sandbox Code Playgroud)

显示像

col1               col2  col3
very long column1  col2  col3
Run Code Online (Sandbox Code Playgroud)

?(或许有一些颜色衬里隔板)

csv emacs alignment

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

相当于GNU make中的pipefail?

说我有以下文件:

buggy_program:

#!/bin/sh
echo "wops, some bug made me exit with failure"
exit 1
Run Code Online (Sandbox Code Playgroud)

Makefile文件:

file.gz:
    buggy_program | gzip -9 -c >$@
Run Code Online (Sandbox Code Playgroud)

现在如果我输入make,file.gz即使buggy_program退出非零状态,GNU make也会很乐意构建.

在bash中set -o pipefail,如果管道中至少有一个程序出现故障,我可以做一个失败的管道退出.GNU make中有类似的方法吗?或者一些不涉及临时文件的解决方法?(这里gzipping的原因正是为了避免一个巨大的临时文件.)

makefile pipe

17
推荐指数
3
解决办法
3029
查看次数

D3力布局:使拖动平移(缩放)更平滑

我有一个d3.js静态力布局图可以变得相当大(有时它的一部分被剪裁),所以我想让用户通过拖动平移整个图形.我认为我不需要拖动单个节点,我有一种感觉会让人感到困惑,但是我希望能够显示由svg边界剪切的图形部分.

我在有一个小例子http://bl.ocks.org/3811811它使用

visF.append("rect")
 .attr("class", "background")
 .attr("width", width)
 .attr("height", height)
 .call(d3.behavior.zoom().on("zoom", redrawVisF));
function redrawVisF () {
  visF.attr("transform","translate(" + d3.event.translate + ")" + " scale(" + d3.event.scale + ")");
}
Run Code Online (Sandbox Code Playgroud)

实现平移,但我发现它真的是"闪光"并且根本不是很平滑,我猜它会阻止人们尝试拖动功能.有没有人知道为什么会发生这种情况和/或如何解决它?

zoom pan drag d3.js force-layout

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

让其他用户停止/重启简单的bash守护进程 - 使用信号还是什么?

我有一个Web服务器,我运行一些慢启动程序作为守护进程.当我重新编译它们或切换到它们的另一个安装时,这些有时需要快速重启(或停止).

灵感来自http://mywiki.wooledge.org/ProcessManagement,我正在写称为脚本daemonise.sh,看起来像

#!/bin/sh
while :; do
    ./myprogram lotsadata.xml
    echo "Restarting server..." 1>&2
done
Run Code Online (Sandbox Code Playgroud)

保持"守护进程"运行.由于我有时需要停止它,或者只是重新启动它,我在屏幕会话中运行该脚本,如:

$ ./daemonise.sh & DPID=$!
$ screen -d
Run Code Online (Sandbox Code Playgroud)

然后也许我重新编译我的程序,将它安装到一个新的路径,启动新的路径并想要杀死旧路径:

$ screen -r
$ kill $DPID
$ screen -d
Run Code Online (Sandbox Code Playgroud)

当我是唯一的维护者时,这很好用,但现在我想让其他人停止/重新启动程序,无论是谁启动它.daemonise.sh事实上,为了使事情变得更复杂,脚本实际上会启动大约16个程序,如果你不知道它们的PID,那么杀死每一个程序都会很麻烦.

让另一个用户停止/重启守护进程的"最佳实践"方法是什么?

我想过共享屏幕会话,但这听起来很丑陋和不安全.我现在提出的最好的解决方案是在捕获某些信号的脚本中包装起始和终止:

#!/bin/bash
DPID=
trap './daemonise.sh & DPID=$!' USR1
trap 'kill $DPID' USR2 EXIT

# Ensure trapper wrapper doesn't exit:
while :; do
    sleep 10000 & wait $!
done
Run Code Online (Sandbox Code Playgroud)

现在,如果另一个用户需要停止守护进程而我不能这样做,她只需要知道包装器的pid,例如sudo kill -s USR2 $wrapperpid.(此外,这使得可以在重新启动时运行守护进程,并且仍然可以干净地杀死守护进程.)

有更好的解决方案吗?我没有看到这个解决方案存在明显的问题吗?

(在阅读了Greg的Bash Wiki之后,我想避免任何涉及pgrep或PID文件的解决方案......)

bash signals daemon process

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

为什么 GNU 出现错误时会以 0 退出?

生成文件:

\n\n
foo.o: foo.cpp\n    g++ -o foo.o foo.cpp\n
Run Code Online (Sandbox Code Playgroud)\n\n

foo.cpp:

\n\n
aslkfdj\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n
$ g++ -o foo.o foo.cpp; echo $?\nfoo.cpp:1:1: error: \xe2\x80\x98aslkfdj\xe2\x80\x99 does not name a type\n aslkfdj\n ^\n1\n\n$ make; echo $?\ng++ -o foo.o foo.cpp\nfoo.cpp:1:1: error: \xe2\x80\x98aslkfdj\xe2\x80\x99 does not name a type\n aslkfdj\n ^\nMakefile:2: recipe for target 'foo.o' failed\nmake: *** [foo.o] Error 1\n0\n$ \n
Run Code Online (Sandbox Code Playgroud)\n\n

我期望 make 的退出代码为 2,因为 g++ 返回非零,参见。

\n\n
$ man make|grep exits -A2\n       GNU make exits with a status of zero if all makefiles …
Run Code Online (Sandbox Code Playgroud)

makefile exit-code

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

如何通过 ssh 从 Windows 机器进行 git clone?

我可以ssh windowsmachine从 Linux 访问 Windows 机器,从那里我可以git init --bare foo.git,告诉我Initialized empty Git repository in C:/Users/unhammer/foo.git/

但是我如何从 unix 端克隆它呢?

$ git clone ssh://windowsmachine:foo.git
Cloning into 'foo'...
fatal: No path specified. See 'man git-pull' for valid url syntax

$ git clone ssh://windowsmachine:C:\\Users\\unhammer\\foo.git
Cloning into '\Users\unhammer\foo'...
fatal: No path specified. See 'man git-pull' for valid url syntax

$ git clone ssh://windowsmachine:/foo.git
Cloning into 'foo'...
fatal: ''/foo.git'' does not appear to be a git repository
fatal: Could not read from …
Run Code Online (Sandbox Code Playgroud)

windows git ssh

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

有监督的自动重启最大尝试次数?

http://supervisord.org/configuration.html#program-x-section-values表示您可以使用autorestart = true在退出时重启,但没有说明如何在退出前给出最大的重启次数(在startsecs内)起来 有没有办法做到这一点?注意:我不是在说第一次启动,而是在程序运行10天后崩溃的事件。

根据文档,autorestart并不关心startretries

autorestart控制supervisor是否在成功启动程序后退出(进程处于RUNNING状态),是否将自动重新启动程序。

进程启动时(进程处于STARTING状态),supervisord具有不同的重启机制。流程启动期间的重试由startsecs和startretries控制。

supervisord

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

POSIX 可以从程序输出中设置变量吗?

在 GNU make 中,可以做一些事情,比如X:=$(shell command -v foo)将 X 设置为该 shell 命令的输出。有没有办法用纯 POSIX make 实现同样的事情?

posix makefile

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

标签 统计

makefile ×3

alignment ×1

bash ×1

csv ×1

d3.js ×1

daemon ×1

drag ×1

emacs ×1

exit-code ×1

force-layout ×1

git ×1

pan ×1

pipe ×1

posix ×1

process ×1

signals ×1

ssh ×1

supervisord ×1

windows ×1

zoom ×1