这可能与如何在graphviz中将边缘标签放置在边缘上有关:我有以下图表,我使用该命令可视化dot -Teps g.dot > g.eps:
graph triple {
node [shape=box]; User; Object; Tag;
node [shape=diamond,style=filled]; Triple;
{
User -- Triple [label = "1"];
Object -- Triple [label = "1"];
}
{
rank=same;
User;
Object;
}
Triple -- Tag [label="n"];
}
Run Code Online (Sandbox Code Playgroud)
我希望通过在User的左侧放置User和Triple之间的标签来使结果更加对称.
我有一个shell脚本,在几个目录(fgit)中运行相同的命令.对于每个目录,我希望它显示当前提示+将在那里运行的命令.如何获得与解码(扩展)对应的字符串PS1?例如,我的默认PS1是
${debian_chroot:+($debian_chroot)}\[\e[1;32m\]\u\[\e[0m\]@\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]$(__git_ps1 ' (%s)')$
Run Code Online (Sandbox Code Playgroud)
我想回应最终的提示username@hostname:/path$,最好(但不一定)用漂亮的颜色.粗略地看一下Bash手册没有透露任何明确的答案,echo -e $PS1只评估颜色.
多个单词是很简单的:
pluralize(@total_users, "user")
Run Code Online (Sandbox Code Playgroud)
但是如果我想要打印"有/ N个用户/用户" 怎么办:
有0位用户
有1位用户
该用户已经有2位用户
,即如何复句?
在谷歌搜索,浏览SO和阅读之后,似乎没有一种Rails风格的方式来有效地仅获得Parent具有至少一个 Child对象(通过has_many :children关系)的那些对象.在纯SQL中:
SELECT *
FROM parents
WHERE EXISTS (
SELECT 1
FROM children
WHERE parent_id = parents.id)
Run Code Online (Sandbox Code Playgroud)
我最接近的是
Parent.all.reject { |parent| parent.children.empty? }
Run Code Online (Sandbox Code Playgroud)
我正在尝试构建一个符合标准的网站框架,根据浏览器支持,将XHTML 1.1作为application/xhtml + xml或HTML 4.01作为text/html提供.目前它只是在accept头中的任何地方查找"application/xhtml + xml",如果它存在则使用它,但这不灵活 - text/html可能有更高的分数.此外,当添加其他格式(WAP,SVG,XForms等)时,它将变得更加复杂.那么,有没有人知道从服务器给出的字符串数组中选择一个经过试验和验证的PHP代码,要么是客户最好支持的,要么是基于客户得分的有序列表?
(可能与某些程序有关,不接受输入文件的进程替换?)
在一些Bash单元测试脚本中,我使用以下技巧来记录和显示命令的stdout和stderr:
command > >(tee "${stdoutF}") 2> >(tee "${stderrF}" >&2)
Run Code Online (Sandbox Code Playgroud)
此过程会向stdout生成一些输出,因此$stdoutF文件会获取一些数据.然后我运行另一个不输出任何数据的命令:
diff -r "$source" "$target" > >(tee "${stdoutF}") 2> >(tee "${stderrF}" >&2)
Run Code Online (Sandbox Code Playgroud)
但是,在运行空白测试(使用shunit-ng)之前,此过程看起来并不总是成功完成:
assertNull 'Unexpected output to stdout' "$(<"$stdoutF")"
Run Code Online (Sandbox Code Playgroud)
在100次运行测试中,这次失败了25次.
sync在测试文件空虚之前调用它是否足够:
sync
assertNull 'Unexpected output to stdout' "$(<"$stdoutF")"
Run Code Online (Sandbox Code Playgroud)
...和/或它应该通过强制执行命令的顺序来工作:
diff -r "$source" "$target" \
> >(tee "${stdoutF}"; assertNull 'Unexpected output to stdout' "$(<"$stdoutF")")
2> >(tee "${stderrF}" >&2)
Run Code Online (Sandbox Code Playgroud)
...和/或它可能以tee某种方式assertNull直接而不是文件?
更新:sync不是答案 - 请参阅下面的Gilles回复.
更新2 …
你如何比较bash中的两个数组来找到所有相交的值?
假设:
array1包含值1和2,
array2包含值2和3
结果我应该回来2.
我自己的答案,由于声誉不佳我无法发布:
for item1 in $array1; do
for item2 in $array2; do
if [[ $item1 = $item2 ]]; then
result=$result" "$item1
fi
done
done
Run Code Online (Sandbox Code Playgroud)
我也在寻找替代解决方案.
我正在编写一些代码的单元测试,这些代码使用sys.stderr.write来报告输入中的错误.这是应该的,但这会破坏单元测试输出.有没有办法告诉Python不输出单个命令的错误消息,àla 2> /dev/null?
我的一个表有以下定义:
CREATE TABLE incidents
(
id serial NOT NULL,
report integer NOT NULL,
year integer NOT NULL,
month integer NOT NULL,
number integer NOT NULL, -- Report serial number for this period
...
CONSTRAINT PRIMARY KEY (id),
CONSTRAINT UNIQUE (report, year, month, number)
);
Run Code Online (Sandbox Code Playgroud)
你会如何去递增number列中为每次report,year和month 独立?我想避免创建用于每个序列或表(report,year,month)集.
如果PostgreSQL支持在 MySQL的MyISAM表中" 在多列索引中的辅助列上 "递增,那将是很好的,但我在手册中找不到这样的功能.
一个明显的解决方案是选择表 + 1中的当前值,但这对于并发会话显然是不安全的.也许预插入触发器可以工作,但它们是否保证是非并发的?
另请注意,我正在单独插入事件,因此我不能像其他地方一样使用generate_series.
经过一些搜索和浏览IPython 文档和一些代码后,我似乎无法弄清楚是否可以将命令历史记录(而不是输出日志)存储到文本文件而不是SQLite数据库.ipython --help-all似乎表明此选项不存在.
这对于控制常用命令的版本非常好,例如.bash_history.
编辑:基于@minrk答案的工作解决方案.
bash ×3
python ×2
activerecord ×1
dot ×1
graphviz ×1
http-headers ×1
inflection ×1
ipython ×1
php ×1
plural ×1
postgresql ×1
ps1 ×1
unit-testing ×1