我希望为此受到一些抨击,但我在任何地方都找不到答案。好像应该很明显了吧。有时,当我在 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)
我知道我搞砸了,但如何在不关闭终端的情况下返回提示?
我正在尝试运行以下命令:
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) 听起来我和这个问题问的是同一件事,但我有不同的要求。这是我的文件系统的一个例子:
/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 脚本。
我试图在 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)
我遇到的问题是当前行背景颜色覆盖了光标背景颜色,所以它看起来像这样:

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

我在这里做错了什么?
我一直在到处寻找这个。有谁知道如何阻止 DD-WRT 路由器上的特定 URL?例如,我想阻止website.com/whatever但不想阻止website.com、blah.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 规则,将一些网络流量请求传递给代理,而不是直接路由它:
Run Code Online (Sandbox Code Playgroud)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:8118Privoxy …
我有一个数组:
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) 我在我的网络上使用 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。
不幸的是,这似乎不起作用。如何在允许配置文件中的域的其余部分的同时阻止特定的子域?
我希望能够向通过我的 DD-WRT 路由器的某些 URL 请求添加一个参数。具体来说,我想弄清楚如何在 Google 中强制进行安全搜索,这意味着我必须附加safe=on到任何以*google*.
我已经阅读了有关在充当代理的路由器上运行服务器的信息。然后在那台服务器上我可以使用 mod_rewrite 或类似的东西。我还阅读了有关使用 iptables 的防火墙规则的信息。这两个都超出了我的范围,但我似乎找不到任何真正的指导。
我想使用 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,则根本不要使用上游服务器。
如果我不能做这样的事情,那么也许我需要的是两个独立的网络。
在我的 .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)