当寻找的路径,可执行文件或检查,如果你在Unix shell中输入命令的名称会发生什么,有不同的公用事业过多(which,type,command,whence,where,whereis,whatis,hash,等)。
我们经常听说which应该避免。为什么?我们应该用什么来代替?
我正在使用tmux和 OSX。从终端复制和粘贴时,tmux我可以按住Option并选择文本。但是我无法让文本留在窗格内。因此,当我想复制文本时,我需要将窗格循环到最左侧,或者缩放窗格,如下所示。
除了必须按住Option键之外,这也是一种痛苦。我知道我可以进入可视模式并使用 vim 移动来到达那里,但我宁愿有一种使用鼠标的方法。有没有人找到解决方法?
我正在使用带有 bash shell 的全新安装的 ubuntu 16.04。我想做两件事:
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 的回答以获得更详细的解释
$ date +'%s'
1491150773
Run Code Online (Sandbox Code Playgroud)
通过阅读date(1)手册页(注意:我实际上使用的是 macOS),我找到了一个说明用法的示例:
Run Code Online (Sandbox Code Playgroud)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.
从阅读示例来看,似乎+可以放在单引号内:
$ date '+%s'
1491150781
Run Code Online (Sandbox Code Playgroud)
即使我能够成功打印当前的纪元时间,我也不明白它为什么起作用并且有一些问题:
date +'%s'打印当前纪元时间?有没有更通用的例子来说明它在这个例子中的用法背后的模式?+引号放在里面?我试过将命令放入explainshell,但它不是很有帮助:
给定 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) 我正在查看带有以下代码的 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) 我在在线闪存卡中读到命令是:
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 拥有的所有进程”
我很好奇:
每当我搜索手册页时,我几乎总是试图找出特定标志的情况。例如,在搜索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”的搜索?
喜欢您的想法或您用来快速浏览文档的其他工具
我在另一个答案中读到,我无法将参数传递给解释器,而不是我给出的/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) 我完全困惑为什么当有两个范围\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)