小编Big*_*uge的帖子

如何退出或取消错误的 bash 命令?

我希望为此受到一些抨击,但我在任何地方都找不到答案。好像应该很明显了吧。有时,当我在 bash 终端中输入错误命令时,光标会跳到下一行而没有任何错误或任何内容。我说不出我做错了什么。就像我被困在程序中一样。重演:

$ tidy
Run Code Online (Sandbox Code Playgroud)

我:“糟糕!这不是我想打字的意思……”

:q
Run Code Online (Sandbox Code Playgroud)

我:“那没用……”

:exit
:quit
exit
quit
/exit
/quit
-exit
-quit
-wtf???
Run Code Online (Sandbox Code Playgroud)

我知道我搞砸了,但如何在不关闭终端的情况下返回提示?

command-line shell kill terminal

52
推荐指数
4
解决办法
46万
查看次数

查找:缺少 -exec 的参数

我正在尝试运行以下命令:

find a/folder b/folder -name *.c -o -name *.h -exec grep -I foobar '{}' +
Run Code Online (Sandbox Code Playgroud)

这是返回错误:

find: missing argument to -exec
Run Code Online (Sandbox Code Playgroud)

我看不出这个命令有什么问题,因为它似乎与手册页匹配:

-exec 命令 {} +

-exec 选项的这个变体在选定的文件上运行指定的命令,但命令行是通过在每个选定的文件名后附加来构建的;命令的总调用次数将远小于匹配文件的数量。命令行的构建方式与 xargs 构建其命令行的方式非常相似。命令中只允许有一个“{}”实例。该命令在起始目录中执行。

我也试过:

find a/folder b/folder -name *.c -o -name *.h -exec grep -I foobar {} +
find a/folder b/folder -name *.c -o -name *.h -exec 'grep -I foobar' {} +
find a/folder b/folder -name *.c -o -name *.h -exec 'grep -I foobar' '{}' +
find a/folder b/folder -name "*.c" -o -name …
Run Code Online (Sandbox Code Playgroud)

find

42
推荐指数
3
解决办法
8万
查看次数

如何使用 grep 搜索多个未嵌套的目录?

听起来我和这个问题问的是同一件事,但我有不同的要求。这是我的文件系统的一个例子:

  • /代码/
    • 内部的/
      • 开发/
      • 主要的/
    • 民众/
      • 开发/
      • 主要的/
      • 释放/
    • 工具/

/code/internal/dev//code/public/dev//code/tools/包含多个项目的子目录。我几乎只在/code/internal/and的 dev 分支中工作/code/public/,并且通常我想在这些目录中搜索文本字符串 with /code/tools/(没有分支)。在这些情况下,我必须执行三个单独的命令:

$ grep -r "some string" /code/internal/dev/
$ grep -r "some string" /code/public/dev/
$ grep -r "some string" /code/tools/
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一个命令可以做到这一点。如果没有,我很可能需要编写一个简单的 bash 脚本。

grep search

32
推荐指数
2
解决办法
8万
查看次数

如何在 .vimrc 中突出显示当前行和光标?

我试图在 Vim 中突出显示当前行以及光标位置。这是我的 .vimrc:

set cursorline
hi CursorLine ctermbg=8 ctermfg=15 "8 = dark gray, 15 = white
hi Cursor ctermbg=15 ctermfg=8
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是当前行背景颜色覆盖了光标背景颜色,所以它看起来像这样:

当前行突出显示,但光标没有突出显示。

我可以清楚地知道光标在哪里,因为前景色几乎是黑色的,但是当光标在一个空格上或在一行的开头/结尾时,除非我移动它,否则我不知道它在哪里。

光标位于行尾,但您永远不会知道。

我在这里做错了什么?

vim vimrc

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

如何在 DD-WRT 路由器上阻止特定 URL?

我一直在到处寻找这个。有谁知道如何阻止 DD-WRT 路由器上的特定 URL?例如,我想阻止website.com/whatever但不想阻止website.comblah.website.com、 或website.com/blah。有没有办法做到这一点,或者你只能阻止整个域?

我尝试在 DD-WRT 配置中的访问限制下添加有问题的 URL,但它似乎没有任何效果。这是我的设置:

在此处输入图片说明

这是客户名单:

在此处输入图片说明

我仍然可以在 IP 地址为 192.168.1.146 的主 PC 上轻松浏览到 google.com/imghp 和 google.com/images(重定向到 google.com/imghp)。

在DD-WRT wiki 的这个页面上,它说“在通过 URL 地址阻止网站下,输入您希望阻止的域名(如果有)。” 除了 DD-WRT 论坛上的帖子之外,这给我的印象是您只能在 DD-WRT 设置中的访问限制下阻止域。

我开始怀疑这个问题是否必须使用 iptables 来解决,或者可能通过在路由器本身上安装代理服务器来解决。

编辑

DD-WRT 论坛上的用户 goli 对此事有以下看法(链接):

有一个在 DD-WRT 上运行良好的 Privoxy 版本。我刚刚安装了它。

Privoxy 有一个参数“accept-intercepted-requests 1”,允许将其用作透明代理。

我添加了一个 iptables 规则,将一些网络流量请求传递给代理,而不是直接路由它:

iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -s 192.168.0.128/255.255.255.224 -j DNAT --to 192.168.0.1:8118    
Run Code Online (Sandbox Code Playgroud)

Privoxy …

http-proxy web dd-wrt access-control

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

如何在数组的每个成员之前添加和附加?

我有一个数组:

CATEGORIES=(one two three four)
Run Code Online (Sandbox Code Playgroud)

我可以使用参数扩展添加到每个数组成员:

echo ${CATEGORIES[@]/#/foo }
Run Code Online (Sandbox Code Playgroud)

我可以以相同的方式附加到每个数组成员:

echo ${CATEGORIES[@]/%/ bar}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这两点?这些都不起作用:

echo ${CATEGORIES[@]/(.*)/foo \1 bar}
echo ${CATEGORIES[@]/(.*)/foo $1 bar}
echo ${CATEGORIES[@]/(.*)/foo ${BASH_REMATCH[1]} bar}
Run Code Online (Sandbox Code Playgroud)

bash array string shell-script

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

如何使用 dnsmasq 阻止子域?

我在我的网络上使用 dnsmasq 作为白名单。我的 dnsmasq.conf 文件如下所示:

bogus-priv
domain-needed
no-resolv

server=/stackexchange.com/8.8.8.8
#etc...
Run Code Online (Sandbox Code Playgroud)

我希望能够阻止子域,例如:

server=/meta.stackexchange.com/0.0.0.0
Run Code Online (Sandbox Code Playgroud)

我也试过:

address=/meta.stackexchange.com/0.0.0.0
Run Code Online (Sandbox Code Playgroud)

对于两者,我都尝试将 127.0.0.1 替换为 0.0.0.0。

不幸的是,这似乎不起作用。如何在允许配置文件中的域的其余部分的同时阻止特定的子域?

dns dnsmasq

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

如何在 DD-WRT 路由器上启用 URL 重写?

我希望能够向通过我的 DD-WRT 路由器的某些 URL 请求添加一个参数。具体来说,我想弄清楚如何在 Google 中强制进行安全搜索,这意味着我必须附加safe=on到任何以*google*.

我已经阅读了有关在充当代理的路由器上运行服务器的信息。然后在那台服务器上我可以使用 mod_rewrite 或类似的东西。我还阅读了有关使用 iptables 的防火墙规则的信息。这两个都超出了我的范围,但我似乎找不到任何真正的指导。

url http-proxy web dd-wrt access-control

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

网络上特定客户端的 Dnsmasq 白名单

我想使用 dnsmasq 为我网络上的某些客户端设置白名单。

例如,我想为 192.168.1.10 - 192.168.1.20 范围内的客户端制定这些规则:

no-resolv
server=/pbskids.org/192.168.0.1
server=/disney.go.com/192.168.0.1
Run Code Online (Sandbox Code Playgroud)

这样,从这些客户端访问的唯一网站就是列入白名单的网站。该范围之外网络上的客户端应该能够使用他们想要的任何 DNS 服务器。我怎样才能做到这一点?

编辑:

到目前为止,这是我在 dnsmasq.conf 中的内容:

bogus-priv
domain-needed
no-resolv

server=/pbskids.org/192.168.0.1
server=/disney.go.com/192.168.0.1
Run Code Online (Sandbox Code Playgroud)

这具有拒绝对网络上所有客户端进行上游 DNS 查找的预期结果。现在我需要的是一种允许某些客户端使用上游 DNS 的方法。我不认为存在这样的选项,但也许它会帮助我理解:

use-resolv --source 192.168.1.150
Run Code Online (Sandbox Code Playgroud)

即,如果客户端的 IP 地址是 192.168.1.150,则使用上游 DNS 服务器。或者,我最初寻找的是这样的:

no-resolv --source 192.168.1.100
Run Code Online (Sandbox Code Playgroud)

即,如果客户端的 IP 地址是 192.168.1.100,则根本不要使用上游服务器。

如果我不能做这样的事情,那么也许我需要的是两个独立的网络。

dns dnsmasq

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

使用参数列表调用另一个函数的函数不起作用

在我的 .bash_aliases 中,我定义了一个从命令行使用的函数,如下所示:

search -n .cs -n .cshtml -n .html SomeTextIWantToSearchFor /c/code/website/ /c/stuff/something/whatever/
Run Code Online (Sandbox Code Playgroud)

该函数构建了一个 grep 命令,将结果传递给另一个 grep 命令(不幸的是,因为我被困在旧版本上,所以很复杂):

search() {
    local file_names opt OPTARG OPTIND pattern

    file_names=()
    while getopts ":n:" opt; do
        case $opt in
            n)
                file_names+=( "$OPTARG" )
                ;;
        esac
    done
    shift $((OPTIND-1))

    pattern="$1"
    shift

    if (( ${#file_names[@]} > 0 )); then
        file_names="${file_names[@]}"
        file_names=${file_names// /':\|'}:

        grep -I -r "$pattern" "$@" | grep "$file_names"
    else
        grep -I -r "$pattern" "$@"
    fi
}
Run Code Online (Sandbox Code Playgroud)

我定义了另一个调用这个函数的函数:

search-some-set-of-files() {
    local file_names directories

    file_names=( "-n …
Run Code Online (Sandbox Code Playgroud)

bash shell-script function arguments

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