小编Thi*_*ter的帖子

从 bash 历史记录中删除最后 N 行

当不小心将文件粘贴到 shell 中时,它会在 bash 历史记录中放入大量丑陋的无意义条目。有没有一种干净的方法来删除这些条目?显然我可以关闭 shell 并.bash_history手动编辑文件,但也许有某种 API 可用于修改当前 shell 的历史记录?

bash command-history

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

少 --quit-if-one-screen 没有 --no-init

我在一个支持备用屏幕的终端上,less、vim 等使用它来在退出后恢复以前的显示。这是一个很好的功能,但它确实打破了--quit-if-one-screen切换,less因为在这种情况下,较少切换到备用屏幕,显示其数据,确定只有一个屏幕,然后退出,同时带走备用屏幕的内容。

通常建议的解决方法是使用--no-init开关来避免完全使用备用屏幕。但是,这有点难看,因为我确实想使用它以防万一实际上用作寻呼机。因此,我正在寻找一种解决方案,仅当 less 不会自动终止时才使用备用屏幕。

我将主要使用它作为 Git 的寻呼机,因此如果有足够的输出,只运行较少的包装 shell 脚本也可以。至少如果没有一个就没有办法做到这一点。

less

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

是否可以在不设置解释器二进制文件的情况下在脚本中使用功能?

现在我cap_net_bind_service MY_USERNAME在 /etc/security/capability.conf 中使用。
现在我只需要设置cap_net_bind_service+i我最喜欢的脚本语言的解释器,就可以通过 libcap[-ng]添加CAP_NET_BIND_SERVICE有效集。

这工作正常,但我想知道是否有一种方法可以在不为解释器二进制文件设置任何大写的情况下实现相同的目标。虽然这不是一个大问题(其他用户帐户没有上限,因此即使在解释器二进制文件上设置了位也无法使用它),但有点烦人,因为每次解释器运行时我都必须重新设置标志更新。

linux scripting executable setcap capabilities

15
推荐指数
1
解决办法
4639
查看次数

删除当前 bash 命令行中的整个参数

使用^W(unix-word-rubout) 我可以轻松地从 bash shell 的当前命令中删除单个“单词”。

但是,当处理包含空格的引用参数(或包含反斜杠转义空格的未引用参数)时,这不会很好地工作,因为它只删除一个单词而不是整个参数。

所以我正在寻找一种删除整个论点的方法。

示例(光标总是在最后):

$ foo --bar "foo bar" meow
[black magic]
$ foo --bar "foo bar"
[black magic]
$ foo --bar
[black magic]
$ foo
Run Code Online (Sandbox Code Playgroud)

bash readline inputrc

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

如果 PROMPT_COMMAND 中的函数未定义,如何避免来自子 shell 的警告?

我正在使用以下代码来获得一个很好的提示(包括 git 信息等):

function set_prompt {
    # magic happens in here ;)
}

export PROMPT_COMMAND='set_prompt'
Run Code Online (Sandbox Code Playgroud)

但是,有时在使用某些在内部大量使用 bash 的程序后,我会收到以下警告:

bash:set_prompt:找不到命令

一个很好的例子是 Gentoo 的包管理器emerge,它在错误存在时显示错误。这没什么大不了的 - 只是看起来很丑,不会破坏任何东西。但无论如何我都想摆脱它。

我认为这是因为PROMPT_COMMAND环境变量是由emerge 的 shell 继承的,但函数不是。

有没有办法使PROMPT_COMMAND变量不可继承?或者另一种方法来避免这个烦人的问题?

bash environment-variables

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