小编gnu*_*chi的帖子

zsh: SHARE_HISTORY 或 INC_APPEND_HISTORY 中断 EXTENDED_HISTORY

我想在终端之间共享历史记录并跟踪历史命令的经过时间。直观的方法似乎是同时使用EXTENDED_HISTORYand SHARE_HISTORY,但这将在重新启动 shell 后将所有经过的时间戳设置为 0。这是正确的方法吗?甚至有可能吗?

场景 1:EXTENDED_HISTORYSHARE_HISTORY

$ history -Dn | sed 's|\\n|\n      |g'
0:00  cat << EOF > ~/.zshrc
          HISTFILE=~/.zhistory-test
          HISTSIZE=100
          SAVEHIST=100
          setopt EXTENDED_HISTORY
          setopt SHARE_HISTORY # the only change compared to below
      EOF
0:00  exec zsh
Run Code Online (Sandbox Code Playgroud)

0:00sleep 1

0:00  exec zsh
Run Code Online (Sandbox Code Playgroud)

场景2:仅 EXTENDED_HISTORY

$ history -Dn | sed 's|\\n|\n      |g'
0:00  cat << EOF > ~/.zshrc
          HISTFILE=~/.zhistory-test
          HISTSIZE=100
          SAVEHIST=100
          setopt EXTENDED_HISTORY
      EOF
0:00  exec zsh
Run Code Online (Sandbox Code Playgroud)

0:01sleep 1

0:00  exec zsh …
Run Code Online (Sandbox Code Playgroud)

command-history zsh configuration timestamps

7
推荐指数
1
解决办法
1074
查看次数

Makefile shell 忽略 sed regexp 行尾

我有一个用于各种 C 代码测试的文件夹,其中包含许多名为*.c. 我的目标是让 Makefile 搜索以任何结尾的文件名.c,并将该文件名的根添加到目标中。

Makefile

TARGETS = $(shell ls *.c | sed "s/\.c$//g")
all: $(TARGETS)
Run Code Online (Sandbox Code Playgroud)

问题是 shell 命令在 sh 中按预期工作:

$ sh -c 'ls *.c | sed "s/\.c$//g"'
hello
Run Code Online (Sandbox Code Playgroud)

...虽然它失败了make

$ make
sed: 1: "s/\.c/g": unterminated substitute in regular expression
make: Nothing to be done for `all'.
Run Code Online (Sandbox Code Playgroud)

我尝试转义$as \$,而是产生:

`sed: 1: "s/\.c\/g": unterminated substitute pattern`
Run Code Online (Sandbox Code Playgroud)

"用单引号 ( ')替换双引号 ( ) 也是如此。

shell make special-characters quoting

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