小编mbi*_*ras的帖子

为什么不使用“哪个”?那用什么?

当寻找的路径,可执行文件或检查,如果你在Unix shell中输入命令的名称会发生什么,有不同的公用事业过多(whichtypecommandwhencewherewhereiswhatishash,等)。

我们经常听说which应该避免。为什么?我们应该用什么来代替?

shell history which portability

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

如何使用 tmux 用鼠标复制和粘贴

我正在使用tmux和 OSX。从终端复制和粘贴时,tmux我可以按住Option并选择文本。但是我无法让文本留在窗格内。因此,当我想复制文本时,我需要将窗格循环到最左侧,或者缩放窗格,如下所示。

除了必须按住Option键之外,这也是一种痛苦。我知道我可以进入可视模式并使用 vim 移动来到达那里,但我宁愿有一种使用鼠标的方法。有没有人找到解决方法?

在此处输入图片说明 在此处输入图片说明

tmux clipboard mouse

78
推荐指数
4
解决办法
8万
查看次数

在 bash vi 模式下,映射 jk 退出插入模式

我正在使用带有 bash shell 的全新安装的 ubuntu 16.04。我想做两件事:

  1. 设置 vi 模式,以便我可以从终端进行类似 vim 的运动
  2. 通过键入退出插入模式 jk

我在另一篇文章中读到如何做到这一点zsh,我该怎么做bash

tl;博士

bind '"jk":vi-movement-mode'到您的.bashrc文件后,set -o vi:)

server@thinkpad:~$ tail -n 2 .bashrc
set -o vi
bind '"jk":vi-movement-mode'
Run Code Online (Sandbox Code Playgroud)

请参阅@grochmal 的回答以获得更详细的解释

bash keyboard-shortcuts vi

15
推荐指数
1
解决办法
6974
查看次数

使用日期实用程序打印纪元时间

通过阅读另一个答案,我知道以下命令可用于打印当前纪元时间

$ date +'%s'
1491150773
Run Code Online (Sandbox Code Playgroud)

通过阅读date(1)手册页(注意:我实际上使用的是 macOS),我找到了一个说明用法的示例:

 Finally the command:

 date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"

 can be used to parse the output from date and express it in Epoch time.
Run Code Online (Sandbox Code Playgroud)

从阅读示例来看,似乎+可以放在单引号内:

$ date '+%s'
1491150781
Run Code Online (Sandbox Code Playgroud)

即使我能够成功打印当前的纪元时间,我也不明白它为什么起作用并且有一些问题:

  • 为什么要date +'%s'打印当前纪元时间?有没有更通用的例子来说明它在这个例子中的用法背后的模式?
  • 为什么我可以把+引号放在里面?

我试过将命令放入explainshell,但它不是很有帮助:

在此处输入图片说明

command-line shell date quoting

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

当 podman 使用 systemd 启动时,为什么在不同的 cgroup 中很常见?

给定 podman 安装在 linux 系统和一个名为 baz.service 的 systemd 单元上:

# /etc/systemd/system/baz.service
[Service]
ExecStart=/usr/bin/podman run --rm --tty --name baz alpine sh -c 'while true; do date; sleep 1; done'
ExecStop=/usr/bin/podman stop baz
Run Code Online (Sandbox Code Playgroud)

然后 baz.service 启动:

# systemctl daemon-reload
# systemctl start baz.service
Run Code Online (Sandbox Code Playgroud)

然后当我检查单元的状态时,我在 /system.slice/baz.service cgroup中看不到shorsleep进程

# systemctl status baz
? baz.service
   Loaded: loaded (/etc/systemd/system/baz.service; static; vendor preset: enabl
   Active: active (running) since Sat 2019-08-10 05:50:18 UTC; 14s ago
 Main PID: 16910 (podman)
    Tasks: 9
   Memory: 7.3M
      CPU: …
Run Code Online (Sandbox Code Playgroud)

systemd cgroups docker containers

13
推荐指数
1
解决办法
1033
查看次数

这个 bash 脚本中的“test $2 &&”是什么意思?

我正在查看带有以下代码的 bash 脚本:

#!/bin/sh

set -e # Exit if any command fails

# If multiple args given run this script once for each arg
test $2 && {
  for arg in $@
    do $0 $arg
  done
  exit
}
.
.
.
Run Code Online (Sandbox Code Playgroud)

正如评论中提到的,目的是“如果有多个参数,则在每个参数上运行脚本”我有一些运行器代码来测试这一点:

# install-unit
# If multiple args given run this script once for each arg
test $2 && {
  echo "\$0: $0"
  echo "\$1: $1"
  echo "\$2: $2"
  echo "test \$2 && is true"
}

test $2 && { …
Run Code Online (Sandbox Code Playgroud)

scripting bash

9
推荐指数
2
解决办法
2453
查看次数

如何在Centos 7上杀死`user`拥有的所有进程?

我在在线闪存卡中读到命令是:

pkill -u bob $(pgrep -u bob)
Run Code Online (Sandbox Code Playgroud)

然而,我认为这是错误的。我认为它在说:

杀死所有拥有的处理bob,和4572\n4600

因为:

[bob@localhost ~]$ pgrep -u bob
4572
4600
Run Code Online (Sandbox Code Playgroud)

此外,它给出了一个错误:

[bob@localhost ~]$ pkill -u bob $(pgrep -u bob)
pkill: only one pattern can be provided
Try `pkill --help' for more information.
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为您不能在用户名中使用换行符,对吗?

我认为命令应该只是:

pkill -u bob
Run Code Online (Sandbox Code Playgroud)

“杀死鲍勃拥有的所有进程”

而命令:

pgreg -u bob 
Run Code Online (Sandbox Code Playgroud)

给出“bob 拥有的所有进程”

我很好奇:

  • 我是否按预期使用了正确的命令?
  • 我对错误方式的分析准确吗?

process process-management pkill

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

如何搜索手册页中的标志?

每当我搜索手册页时,我几乎总是试图找出特定标志的情况。例如,在搜索pandoc的手册页时,我正在搜索 for-f标志。我不知道怎么说,快速到达这里的标志:

OPTIONS
   General options
       -f FORMAT, -r FORMAT, --from=FORMAT, --read=FORMAT
Run Code Online (Sandbox Code Playgroud)

并过滤掉以下内容:

iconv -t utf-8 input.txt | pandoc | iconv -f utf-8           
Run Code Online (Sandbox Code Playgroud)

或者

pandoc -f markdown -t latex hello.txt
Run Code Online (Sandbox Code Playgroud)

我尝试过搜索/-f,并且查看了另一篇文章并尝试过,(^|\s)-f($|\s\)但它是无效的。所以我想知道如何快速减少“仅标志-f”的搜索?

喜欢您的想法或您用来快速浏览文档的其他工具

less man regular-expression

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

在这种情况下,为什么我可以将参数传递给 /usr/bin/env?

我在另一个答案中读到,我无法将参数传递给解释器,而不是我给出的/usr/bin/env

另一个潜在的问题是该#!/usr/bin/env技巧不允许您将参数传递给解释器(除了脚本的名称,它是隐式传递的)。

但是,看起来我能够做到,因为awk当我不给它-f标志时它会损坏,而当我给它标志时它会被修复-f,同时使用/usr/bin/env

首先,没有-f标志:

$ cat wrap_in_quotes
#!/usr/bin/env awk
# wrap each line in quotes
# usage: wrap_in_quotes [ file ... ]
{ print "\""$0"\"" }
$ echo foobar | ./wrap_in_quotes
awk: syntax error at source line 1
 context is
     >>> . <<< /wrap_in_quotes
awk: bailing out at source line 1
Run Code Online (Sandbox Code Playgroud)

二、带-f旗:

$ vim wrap_in_quotes
$ cat wrap_in_quotes
#!/usr/bin/env awk -f
# …
Run Code Online (Sandbox Code Playgroud)

arguments shebang

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

为什么我不能用 ed(1) 打印这个正则表达式范围?

我完全困惑为什么当有两个范围\xe2\x80\x94see file2.tf file\xe2\x80\x94;时我不能用 ed 打印这个范围 但当只有一个范围\xe2\x80\x94see file1.tf file\xe2\x80\x94 时我可以打印,并且我可以使用 gsed (macOS 上的 GNU sed)命令进行打印;但我无法用 ed 打印。请考虑我的 shell 会话并澄清我的误解:

\n
$ ed -s file1.tf <<<',n'\n1   # some comment\n2   module "hello_world" {\n3     source = "./mydir"\n4   }\n5   # another comment\n$ ed -s file1.tf <<<'/module.*world/,/}/p'\nmodule "hello_world" {\n  source = "./mydir"\n}\n$ ed -s file2.tf <<<',n'\n1   # some comment\n2   module "hello_world" {\n3     source = "./mydir"\n4   }\n5   # another comment\n6   # some comment\n7   module "hello_again" {\n8     source = "./anotherdir"\n9   }\n10  # another comment\n$ ed …
Run Code Online (Sandbox Code Playgroud)

regular-expression ed

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