我想跟踪find命令发出的系统调用来调试一些性能问题但是我无法弄清楚如何在Mac OS X Yosemite上执行此操作.我如何跟踪任意程序的系统调用,类似于FreeBSD上的strace?我对跟踪文件系统相关的调用特别感兴趣.
我们可以迭代一组项目,一次考虑一个,如下所示:
#!/bin/bash
for i in $( ls ); do
echo item: $i
done
Run Code Online (Sandbox Code Playgroud)
我们如何在类似的循环中一次处理几个项目?就像是:
#!/bin/bash
for i,j,k in $( ls ); do
echo item i: $i
echo item j: $j
echo item k: $k
done
Run Code Online (Sandbox Code Playgroud)
第二个shell脚本不正确,但应准确说明我想要实现的目标.
我正在查看List文档.似乎图书馆没有提供sublist功能.
我正在尝试从i到j获取元素列表.现在我必须把它写成:
let rec sublist list i j =
if i > j then
[]
else
(List.nth list i) :: (sublist list (i+1) j)
Run Code Online (Sandbox Code Playgroud)
这是非常简洁的,但我质疑效率List.nth,因为如果它是O(n),我宁愿以不那么简洁的方式写它.
我想知道他们为什么不提供List.sublistfunc,如果List.nth不是O(1),因为它是如此常见的操作..
我正在编写 PPX 重写器以简化Lenses的定义。让我为普通读者回忆一下什么是镜头。
与记录字段相关联的镜头是一对函数,允许提取记录并更新它。下面是一个例子:
module Lens =
struct
type ('a, 'b) t = {
get : 'a -> 'b;
set : 'b -> 'a -> 'a
}
end
type car = {
vendor: string;
make: string;
mileage: int;
}
let vendor_lens = {
Lens.get = (fun x -> x.vendor);
Lens.set = (fun v x -> { x with vendor = v })
}
Run Code Online (Sandbox Code Playgroud)
将vendor_lens让我们获得该领域的价值vendor在我们car和更新它-这意味着返回的全新副本car只能由值从原来的不同的vendor …
我正在使用Quicklisp在我的Common Lisp项目中加载库,我需要加载一些库的自定义版本,而不是Quicklisp提供的版本.
该库的自定义版本存储在Quicklisp的本地项目目录中,并且已注册本地项目.但Quicklisp仍尝试加载自己的库版本.
如何安排Quicklisp更喜欢图书馆的定制?(附带问题:我怎么能问Quicklisp它将用于加载库的位置?)
我是OCaml的新手,我不知道为什么这会给我一个语法错误:
type ('nonterminal, 'terminal) pe =
| Empty
| T of t
| N of n
| Seq of list
| Choose of list
| Star of e
| Not of e;;
type ('nonterminal, 'terminal) pe_tree =
| Is_empty
| Leaf of t
| Node of (n,tree)
| Sequence of list
| Repeat of list
| Is_not of e;;
Run Code Online (Sandbox Code Playgroud)
所有它说的是第14行字符0-1(这是哪里| Sequence of list)有一个语法错误,我无法弄清楚为什么!
我不知道有什么方法可以在 GNU Make 中以编程方式定义目标。这怎么可能?
有时可以使用替代方法离开。然而,在 Makefile 中以编程方式定义目标的能力对于使用make. 在 FreeBSD 的构建系统或诸如BSD Owl 之类的Makefile 库中可以找到复杂生成规则的示例
shell 脚本和 Makefile 之间的主要区别是:
在 Makefile 中,程序的状态由命令行和文件系统给出,因此可以在作业中断后恢复作业。当然,这需要正确地编写 Makefile,但即使这相当困难,也比使用 shell 脚本实现类似的效果要容易得多。
在 Makefile 中,用建议或钩子装饰一个过程是非常容易的,而这在 shell 脚本中基本上是不可能的。
例如,一个非常简单且有用的模式如下:
build: pre-build
build: do-build
build: post-build
Run Code Online (Sandbox Code Playgroud)
这将build目标呈现为三个目标的组合,一个包含实际指令do-build,另外两个是钩子,在 之前和之后执行do-build。许多为 BSD Make 编写的构建系统都使用这种模式,顺便说一下,它允许以编程方式定义目标,以便可以批量编写:
.for _target in configure build test install
.if !target(${_target})
${_target}: pre-${_target}
${_target}: do-${_target}
${_target}: post-${_target}
.endif
.endfor
Run Code Online (Sandbox Code Playgroud)
.if/.endif块引入的条件使用户能够使用自己对 any 的定义${_target}。
GNU Make 的那个片段的翻译是什么?
在要捕获文件中进程的标准输出但仍要在终端中显示此输出的情况下,可以在script和之间进行选择tee。在这种情况下,这些工具在本质上是等效的,还是有(可能是微妙的)理由偏爱一种?
这些程序script和tee设计用于不同的目的:
script -制作终端会话的打字稿tee - 管道配件script和之间的重要区别tee是:
script传送它监督的进程的退出状态,而tee作为过滤器甚至不知道它。script捕获其监视的进程的stdin,stdout,stderr,而tee仅捕获其过滤的流。在给定的上下文中,这些差异均不相关。
我有这样几个库绿洲文件-我如何能够支持-w ..并-warn-error +a为他们每个人?
出于参考目的,给定的oasis文件如下所示:
OASISFormat: 0.4
Name: re
Version: 1.5.0
Synopsis: Pure OCaml regular expression library
Authors: Jerome Vouillon, Thomas Gazagnaire, Anil Madhavapeddy
License: LGPL-2.0 with OCaml linking exception
Plugins: META (0.4), DevFiles (0.4)
AlphaFeatures: compiled_setup_ml
BuildTools: ocamlbuild
Library re
Path: lib
InternalModules: Re_cset, Re_automata
Modules: Re
Findlibname: re
BuildDepends: bytes
Library re_emacs
Path: lib
XMETADescription: Emacs-compatible regexps
Modules: Re_emacs
Findlibname: emacs
FindlibParent: re
BuildDepends: re
Run Code Online (Sandbox Code Playgroud)