小编the*_*fog的帖子

如何获得 zsh 内置的帮助信息?

如果我想获得 bash 内置的简短使用消息,我可以help <builtin>在命令提示符下使用,例如

$ help export
export: export [-fn] [name[=value] ...] or export -p
    Set export attribute for shell variables.

    Marks each NAME for automatic export to the environment of subsequently
    executed commands.  If VALUE is supplied, assign VALUE before exporting.

    Options:
      -f        refer to shell functions
      -n        remove the export property from each NAME
      -p        display a list of all exported variables and functions

    An argument of `--' disables further option processing.

    Exit Status:
    Returns success …
Run Code Online (Sandbox Code Playgroud)

command-line zsh documentation shell-builtin

18
推荐指数
1
解决办法
4002
查看次数

如何配置 zsh 完成以显示隐藏的文件和文件夹?

目前,当我调用完成时,行为是这样的:

% cd ~/<TAB>
Completing directory
Desktop/    Downloads/  Pictures/   system/     Videos/
Documents/  Music/      Public/     Templates/  www/
Run Code Online (Sandbox Code Playgroud)

如何配置完成以列出隐藏文件?

zsh autocomplete

17
推荐指数
2
解决办法
7921
查看次数

是否可以将 bash 配置为使用像 zsh 这样的一个选项卡自动完成?

正如这里的大多数人所知,在命令提示符下使用 bash 时,如果您部分键入文件名、命令或命令的选项等,如果恰好有一个匹配项,bash 将完成单词。
当有多个匹配项时,您需要点击<Tab>两次,bash 将生成可能匹配项的列表。
我想将 bash 配置为简单地在第一个<Tab>.
这可能不写脚本吗?即外壳选项?

man bash 有一个“可编程完成”部分,但我无法确定是否有启用“单选项卡完成”的选项。

bash autocomplete

14
推荐指数
2
解决办法
8029
查看次数

如何列出已由 APT 包安装的所有文件?

我已经geoip-bin使用以下apt-get命令安装了该软件包:

sudo apt-get install geoip-bin
Run Code Online (Sandbox Code Playgroud)

我想知道使用这个包的命令行命令。
但是当我尝试列出geoip-bin包安装的文件以尝试查找可执行文件时,它没有列在dpkg -S输出中

% dpkg -S geoip-bin
geoip-bin: /usr/share/doc/geoip-bin/changelog.Debian.gz
geoip-bin: /usr/share/lintian/overrides/geoip-bin
geoip-bin: /usr/share/doc/geoip-bin
geoip-bin: /usr/share/doc/geoip-bin/copyright
Run Code Online (Sandbox Code Playgroud)

经过一番研究,我了解到这个包安装了一个 command/executable /usr/bin/geoiplookup。所以在这一点上,我现在知道命令,但为了将来的目的,我想知道如何找出包安装的文件。

进行“反向”文件查找,dpkg -S表明该文件来自geo-ipbin 包。

% dpkg -S /usr/bin/geoiplookup
geoip-bin: /usr/bin/geoiplookup
Run Code Online (Sandbox Code Playgroud)

我想知道是否dpkg -S没有在输出中显示该文件,因为它/usr/bin/geoiplookup是由geoip-bin. 使用 eg 查询依赖项,apt-cache show geoip-bin然后递归查询文件和子依赖项后,仍然无法列出包提供的文件geoip-bin
如何生成包安装的文件的完整列表?

dpkg apt

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

为什么 set-o errexit 会破坏这个 read/heredoc 表达式?

我一直在使用下面的模式在 bash 脚本中将多行消息打印到终端。

read -d '' message <<- EOF
    this is a 
    mulitline
    message
EOF
echo "$message"
Run Code Online (Sandbox Code Playgroud)

这一直在起作用 - 直到几天前该模式才停止工作。停止工作是指当 bash 在脚本中遇到这些 heredoc 表达式时——它似乎什么都不做——没有输出。
我能想到的唯一一件事是,在过去几天里,脚本运行的环境是 Ubuntu 14.04 live USB,而不是“完整”安装。
然后我发现当我在脚本set -o errexit语句之前移动 heredoc 时,它又开始工作了。即这不起作用

#!/bin/bash

set -o errexit

read -d '' message <<- EOF
    this is a 
    mulitline
    message
EOF

echo "$message"
Run Code Online (Sandbox Code Playgroud)

结果:(无)
但这确实有效

#!/bin/bash

read -d '' message <<- EOF
    this is a 
    mulitline
    message
EOF

echo "$message"
Run Code Online (Sandbox Code Playgroud)

结果

$ sudo ./script.sh 
this is a 
mulitline …
Run Code Online (Sandbox Code Playgroud)

bash

12
推荐指数
4
解决办法
2836
查看次数

当我在命令前加上“一次性变量赋值”时,为什么 bash 不扩展这个变量

如果我运行此 bash 命令并为语句添加前缀,则该变量fruit应该存在,但仅在此命令的持续时间内:

$ fruit=apple echo $fruit

$
Run Code Online (Sandbox Code Playgroud)

结果是一个空行。为什么?

引用通配符对此问题的评论:

参数扩展由shell完成,“fruit”变量不是shell变量;它只是“echo”命令环境中的一个环境变量

环境变量仍然是一个变量,所以这肯定对 echo 命令仍然可用吗?

bash variable

12
推荐指数
2
解决办法
3101
查看次数

“CTRL + 箭头/s”的 gnome-terminal ANSI 转义序列是什么?

我想配置我的bash~/.inputrc这些设置
(注:??指的是左,右箭头键)

  • Ctrl+ ?- 应该跳回一个词
  • Ctrl+ ?- 应该向前跳一个词

目前我有这个~/.inputrc,但它不起作用。Ctrl + arrow什么也不产生。

"\eC-5C":forward-word
"\eC-5D":backward-word
Run Code Online (Sandbox Code Playgroud)

我确定我的转义序列是错误的。组合
的正确转义序列是Ctrl + arrow什么?

  • 终端:gnome 终端内的 tmux

keyboard-shortcuts tmux gnome-terminal escape-characters

11
推荐指数
2
解决办法
3550
查看次数

是否可以在 Bash here-documents 中使用 ANSI 颜色转义码?

我正在用 Bash 脚本打印一条消息,我想对其中的一部分进行着色;例如,

#!/bin/bash

normal='\e[0m'
yellow='\e[33m'
cat <<- EOF
    ${yellow}Warning:${normal} This script repo is currently located in:
    [ more messages... ]
EOF
Run Code Online (Sandbox Code Playgroud)

但是当我在终端(tmux内部gnome-terminal)中运行时,ANSI 转义字符只是以\形式打印;例如,

\e[33mWarning\e[0m This scr....
Run Code Online (Sandbox Code Playgroud)

如果我将想要着色的部分移动到printfhere-doc 之外的命令中,它会起作用。?例如,这有效:

printf "${yellow}Warning:${normal}"
cat <<- EOF
    This script repo is currently located in:
    [ more messages... ]
EOF
Run Code Online (Sandbox Code Playgroud)

man bash- 这里文件:

不会对word执行参数和变量扩展、命令替换、算术扩展或路径名扩展。如果word中的任何字符被引用,则分隔符word上引用删除的结果,并且 here-document 中的行不会被扩展。如果word 没有被引用,here-document 的所有行都会进行参数扩展、命令替换和算术扩展。在后一种情况下,字符序列\ <换行符>被忽略,\ …

colors bash escape-characters

10
推荐指数
1
解决办法
7784
查看次数

如何在 Ubuntu 16.04 中使用 gsettings 禁用设备自动挂载?

当我将 U 盘或手机插入我的笔记本电脑时,我不希望操作系统自动挂载设备。
在 Ubuntu 14.04 中,我可以运行以下命令,这将禁用块设备的自动挂载,例如

gsettings set org.gnome.desktop.media-handling automount false
Run Code Online (Sandbox Code Playgroud)

在 16.04 中这个命令现在似乎没有效果,16.04 中的等效命令是什么?

gsettings

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

Iptables 规则中 -m, --match 的目的是什么?

许多 Iptables 规则包含这个-m--match选项,例如

-I INPUT -p tcp -m state --state NEW -m limit --limit 30/minute --limit-burst 5 -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP
Run Code Online (Sandbox Code Playgroud)

-m--match只是“特殊”的选项,这是一个前兆的“正常”的选项?
例如,使用此规则

-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
Run Code Online (Sandbox Code Playgroud)

该术语是否 …

iptables

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