如果我想获得 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) 目前,当我调用完成时,行为是这样的:
% cd ~/<TAB>
Completing directory
Desktop/ Downloads/ Pictures/ system/ Videos/
Documents/ Music/ Public/ Templates/ www/
Run Code Online (Sandbox Code Playgroud)
如何配置完成以列出隐藏文件?
正如这里的大多数人所知,在命令提示符下使用 bash 时,如果您部分键入文件名、命令或命令的选项等,如果恰好有一个匹配项,bash 将完成单词。
当有多个匹配项时,您需要点击<Tab>两次,bash 将生成可能匹配项的列表。
我想将 bash 配置为简单地在第一个<Tab>.
这可能不写脚本吗?即外壳选项?
man bash 有一个“可编程完成”部分,但我无法确定是否有启用“单选项卡完成”的选项。
我已经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。
如何生成包安装的文件的完整列表?
我一直在使用下面的模式在 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 命令并为语句添加前缀,则该变量fruit应该存在,但仅在此命令的持续时间内:
$ fruit=apple echo $fruit
$
Run Code Online (Sandbox Code Playgroud)
结果是一个空行。为什么?
引用通配符对此问题的评论:
参数扩展由shell完成,“fruit”变量不是shell变量;它只是“echo”命令环境中的一个环境变量
环境变量仍然是一个变量,所以这肯定对 echo 命令仍然可用吗?
我想配置我的bash~/.inputrc这些设置
(注:?,?指的是左,右箭头键)
目前我有这个~/.inputrc,但它不起作用。Ctrl + arrow什么也不产生。
"\eC-5C":forward-word
"\eC-5D":backward-word
Run Code Online (Sandbox Code Playgroud)
我确定我的转义序列是错误的。组合
的正确转义序列是Ctrl + arrow什么?
我正在用 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 的所有行都会进行参数扩展、命令替换和算术扩展。在后一种情况下,字符序列\ <换行符>被忽略,
\ …
当我将 U 盘或手机插入我的笔记本电脑时,我不希望操作系统自动挂载设备。
在 Ubuntu 14.04 中,我可以运行以下命令,这将禁用块设备的自动挂载,例如
gsettings set org.gnome.desktop.media-handling automount false
Run Code Online (Sandbox Code Playgroud)
在 16.04 中这个命令现在似乎没有效果,16.04 中的等效命令是什么?
许多 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)
该术语是否 …