小编iva*_*van的帖子

Grep:从手册页搜索标题中的单词时出现意外结果

我在 macOS 上尝试 grep 手册页时遇到了奇怪的行为。例如,Bash 手册页显然出现了字符串NAME

$ man bash | head -5 | tail -1
NAME
Run Code Online (Sandbox Code Playgroud)

如果我 grep forname我确实得到了结果,但如果我 grep forNAME我没有:

$ man bash | grep 'NAME'
$ man bash | grep NAME
Run Code Online (Sandbox Code Playgroud)

我试过其他我知道的大写单词,SHELL搜索BASH结果没有任何结果。

这里发生了什么?

更新:感谢所有的答案!我认为值得添加我遇到这个问题的上下文。我想编写一个 bash 函数来包装man,如果我试图查找内置 shell 的手册页,请跳转到 Bash 手册页的相关部分。可能有更好的方法,但这是我目前所拥有的:

man () {
  case "$(type -t "$1")" in
    builtin)
      local pattern="^ *$1"

      if bashdoc_match "$pattern \+[-[]"; then
        command man bash | less --pattern="$pattern +[-[]"
      elif …
Run Code Online (Sandbox Code Playgroud)

grep man special-characters

20
推荐指数
2
解决办法
1327
查看次数

除了 Bash 和 Zsh 之外的 shell 是否支持 ANSI-C 引用?例如 $'string'

我有一个 shell 脚本,它使用以下内容在其输出中打印绿色复选标记:

col_green="\e[32;01m"
col_reset="\e[39;49;00m"

echo -e "Done ${col_green}?${col_reset}"
Run Code Online (Sandbox Code Playgroud)

在阅读了 Bash 的ANSI-C Quoting 之后,我意识到我可以在设置颜色变量时使用它并-e从我的echo 中删除标志。

col_green=$'\e[32;01m'
col_reset=$'\e[39;49;00m'

echo "Done ${col_green}?${col_reset}"
Run Code Online (Sandbox Code Playgroud)

这似乎很吸引人,因为这意味着无论是传递给 Bash 的内置echo还是外部 util /bin/echo(我使用的是 macOS),消息都能正确打印。

但这是否会降低脚本的可移植性?我知道 Bash 和 Zsh 支持这种引用风格,但我不确定其他人。

shell string quoting escape-characters portability

14
推荐指数
1
解决办法
1425
查看次数

什么是 tmux 的“消息命令”?

我一直在尝试弄清楚如何在 tmux 的复制模式下更改命令提示符的背景颜色。它默认为黑色橙色,至少在我的设置中是这样。

我用这些行更改了状态行中的命令提示符的颜色 .tmux.conf

set -g message-bg '#e7e7e7'
set -g message-fg '#000000'
Run Code Online (Sandbox Code Playgroud)

但这对显示在状态行上方的提示没有影响,例如,当我运行list-keys并点击/搜索时。该Search Down:提示是黑色橙色。

我希望我可以set -g message-command-bg '#e7e7e7'不用骰子来改变它,事实上,我根本不知道有什么message-command-style变化。手册说它改变了“状态行消息命令”的风格,但我不知道那会是什么,如果不是我用message-bg.

有什么帮助吗?

根据要求:我的.tmux.conf

# This seems to have no effect at all
set -g message-command-style bg=red
# nor does this
set -g message-command-bg red

# use UTF8
set -g utf8
set-window-option -g utf8 on

# 256 colors
set -g default-terminal "screen-256color"

# reload config
bind R source-file ~/.tmux.conf …
Run Code Online (Sandbox Code Playgroud)

tmux

7
推荐指数
2
解决办法
8032
查看次数

awk:在匹配到文件末尾后打印行

我正在尝试解析如下使用消息:

Usage:
  docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
  docker-compose -h|--help
...
Commands:
  build              Build or rebuild services
  bundle             Generate a Docker bundle from the Compose file
...
Run Code Online (Sandbox Code Playgroud)

Command仅获取名称。所以我希望跳过所有行并包括该Commands:行,然后在所有后续行上打印第一个单词,即

  build
  bundle
  ...
Run Code Online (Sandbox Code Playgroud)

目前我正在做

docker-compose --help | sed -e '1,/Commands:/d' | awk '{ print $1 }'
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但我怀疑我可以用一个awk. 到目前为止我最接近的是:

docker-compose --help | awk '/Commands:/,0 { print $1 }'
Run Code Online (Sandbox Code Playgroud)

但这包括匹配的Commands:行。可以做到吗?

awk text-processing

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

在重新格式化/重新分区之前删除 GPT/MBR 标签是否重要?

我看过一些磁盘格式化/分区讨论,提到第一步要破坏现有的 GPT/MBR 数据结构:

sgdisk --zap-all /dev/nvme0n1
Run Code Online (Sandbox Code Playgroud)

我以前没有意识到这一点,当我设置磁盘时,我通常使用:

parted --script --align optimal  \
    /dev/nvme0n1 --              \
    mklabel gpt                  \
    mkpart ESP fat32 1MiB 512MiB \
    set 1 boot on                \
    name 1 boot                  \
    mkpart primary 512MiB 100%   \
    set 2 lvm on                 \
    name 2 primary
Run Code Online (Sandbox Code Playgroud)

我应该先把事情清理干净(例如sgdisk --zap-all)吗?不这样做有什么缺点?

gpt mbr disk partition-table

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

使用/维护两个单独的 bash_profile 和 vimrc 的聪明方法是什么

我喜欢在终端和 vim 中使用两种不同的设置。一种是在 vim 中使用浅色背景和有点花哨的航空公司状态栏。另一个使用深色背景和更准系统的 vim 外观。我要么出于优柔寡断,要么偶尔在两者之间摇摆不定。

随意在这两种配置之间轻松切换的智能方法是什么?现在我基本上有两个略有不同的.bash_profiles 和.vimrcs。当我想要变暗时,我手动获取暗配置文件,并定义了一个 bash 别名以使用备用 vimrc 启动 vim。我相信有更好的方法,我会对建议感兴趣。

更新:我采纳了设置主题环境变量以在配置文件中引用的极好建议。奇迹般有效。还发现了这个gem(不是 Ruby 意义上的),它让我同时将 iTerm 配置文件切换为深色配置文件。警告:将 bash 函数定义为这样的单行代码会给我一个语法错误,所以我不得不将它分成多行。

it2prof() {
  echo -e "\033]50;SetProfile=$1\a"
}

alias dark="export THEME=dark && it2prof black && . ~/.bash_profile"
alias light="unset THEME && it2prof white && . ~/.bash_profile"
Run Code Online (Sandbox Code Playgroud)

更好的是,事实证明 iTerm2 有一堆可用于动态更改设置的转义码

另一个更新:iTerm2 文档警告转义序列可能在 tmux 和 screen 中不起作用,实际上它们不起作用。为了让它们工作,你需要告诉多路复用器将转义序列发送到底层终端,而不是试图解释它。它有点毛茸茸,但现在在 tmux、屏幕和正常的 shell 会话中对我有用:

darken() {
  if [ -n "$ITERM_PROFILE" ]; then
    export THEME=dark
    it2prof black
    reload_profile …
Run Code Online (Sandbox Code Playgroud)

vimrc bashrc

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

vpn 不显示 systemd-ask-password 提示

我有一个可用的 OpenVPN 客户端配置,它使用受密码保护的私钥。

如果我openvpn直接运行,会提示我输入密码并且客户端成功启动。

但是,如果我以 开头,则不会提示systemctl我输入密码,并且服务永远不会完成初始化。

似乎systemd-ask-password正在等待密码短语,但没有显示提示。

$ sudo systemctl start openvpn-myclient.service
$ systemctl status openvpn-myclient.service
? openvpn-myclient.service - OpenVPN instance ‘myclient’
   ...
   Status: "Pre-connection initialization successful"
    ...
   CGroup: /system.slice/openvpn-myclient.service
           ??18997 openvpn --suppress-timestamps --config /path/to/client.conf
           ??18998 /path/to/systemd-ask-password --icon network-vpn Enter Private Key Password:
Run Code Online (Sandbox Code Playgroud)

我可以手动创建提示以提交密码:

$ sudo systemd-tty-ask-password-agent --query
Enter Private Key Password: ************************
Run Code Online (Sandbox Code Playgroud)

我也可以通过放入askpass /path/to/passphrase我的 client.conf 来解决这个问题。这避免了对用户输入的需要,但这也意味着以明文形式保存密码。

我想了解发生了什么,我可以做些什么来获得提示出现,或者我如何避免将密码以明文形式显示。

我该如何进一步调试?我阅读了以下手册页,但我仍然不清楚什么在起作用。

  • systemd-ask-password
  • systemd-tty-ask-password-agent
  • systemd-ask-password-wall.service

systemd openvpn

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

我应该为可能共享的可执行文件设置哪些权限?

我正在编写一个 bash 脚本,它可以为我做一些清理工作(清除当前目录中任何 Rails 项目的日志文件)。我正在使其可执行,但我不确定设置“组”和“其他”文件权限的最佳实践是什么。我应该将权限设置为 700 (只有所有者可以 rwx)吗?

我的部分困惑是当文件从一个系统复制到另一个系统时如何确定“所有权”。如果我的 UID 是 509 并且我将my_file.sh文件权限设置为 700,我猜测文件所有权是通过在文件上存储 UID 来确定的。如果我共享my_file.sh并且有人将其下载到他们的系统中,UID 是否会更改以匹配他们自己的?这是否取决于文件的传输方式(scp、git、http 等)?

permissions file-sharing

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

Tmux:我如何绑定到 C--(控制减号)?

我想在我的 .tmux.conf 中绑定到 control-minus 但它似乎不起作用:

bind C-- split-window -v
Run Code Online (Sandbox Code Playgroud)

这可能吗?

keyboard-shortcuts terminal tmux

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

readline:非增量搜索是否提供增量搜索不提供的任何内容?

我在 bash 中经常使用增量搜索 (Ctl-r/Ctl-s),发现它非常有用。

我注意到 Meta-p (Esc p) 运行非增量搜索,我很好奇它的用途是什么,因为它存在增量等效项。它的袖子上是否有一些我忽略的技巧?如果你的命令历史绝对是巨大的,也许它会更快?

由于它不会为您提供从增量搜索中获得的相同交互式反馈,我想知道您为什么要使用它。

bash readline

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