小编par*_*oid的帖子

如何通过 sftp 连接到 Midnight Commander 上的非标准端口?

在 Midnight Commander 中,可以使用以下方法与远程机器建立 SFTP 连接:

cd #sh:yourusername@example.com:/home/username/
Run Code Online (Sandbox Code Playgroud)

当远程机器使用非标准端口时,如何做到这一点?

sftp mc

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

有没有办法阻止 bash 解析 zsh 代码?

我有一个源自.bashrc.zshrc包含一些函数的文件。以前它是两个单独的文件(对于每个 shell),但我现在使用单个文件,因为这些文件几乎相同,并且我更容易管理单个函数文件。

有一个函数对于两个 shell 来说是不同的,所以我想我可以使用一个条件语句,以便使用正确的语句:

[[ $BASH_VERSION ]] && shell=bash
[[ $ZSH_VERSION ]] && shell=zsh

# Search man page for string
if [[ $shell == bash ]]; then
  mans() {
    local q="\'"
    local q_pattern="'${1//$q/$q\\$q$q}'"
    local MANPAGER="less -+MFX -p $q_pattern"
    man "$2"
  }
elif [[ $shell == zsh ]]; then
  mans() MANPAGER="less -+MFX -p ${(q+)1}" man $2
fi
Run Code Online (Sandbox Code Playgroud)

这似乎在 zsh 中工作正常,但是当切换到 bash 时,我从 zsh 行收到错误,即使它不应该在 bash 中使用。有什么办法可以阻止它解析该行吗?

bash

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

特定的 bash 完成文件在 /usr/share/bash-completion/completions 中不起作用,但在 /etc/bash_completion.d 中工作正常

我有一个 git 存储库,其中保存了一些静态链接的二进制文件以及相关的 man 文件和 bash 完成文件,这些文件都是使用GNU Stow来“安装”的以创建符号链接。

我之前已经将 bash 完成文件的符号链接放入,/etc/bash_completion.d没有任何问题,但最近我开始将它们放入/usr/share/bash-completion/completions,因为我认为这对它们来说是一个更正确的位置,因为二进制文件正在进入,/usr/local/bin而 man 文件也在/usr/local/share/man

除了四个特定的 bash 完成文件之外,一切都像以前一样工作,当放置在这个新位置时,这些文件不再工作。这些都是:

fzf 的这两个:

我还有其他 20 个可以正常工作的 bash 补全文件。这些特定的 bash 完成文件是什么让它们在 in 时/etc/bash_completion.d没有问题但在 时却不能工作/usr/share/bash-completion/completions

编辑: 它们也不起作用~/.local/share/bash-completion/completions


附加信息:

这些文件源自标准 Debian/Ubuntu.bashrc系列:

# Enable programmable completion features
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then …
Run Code Online (Sandbox Code Playgroud)

bash autocomplete

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

Crontab 作业不通过电子邮件发送失败

我在 Debian 上有一份 cron 工作:

1 * * * * /home/paradroid/bin/myscript.sh >/dev/null
Run Code Online (Sandbox Code Playgroud)

有安装和配置的MTA,脚本有语法错误时我收到了电子邮件,所以我一直认为出现问题时会通知我。

该脚本curl通过代理下载文件。最近代理失败,curl无法下载。这是脚本中的最后一个命令,它一直以错误代码 7 退出。

我以为发生这种情况时我会收到电子邮件,但我没有。

我怎么会从脚本中的语法错误之类的东西中收到电子邮件警报,但是当脚本无法完成其工作并以错误代码退出时我没有收到它们?

有什么问题吗,或者我是否必须让脚本在出现错误时直接给我发电子邮件curl

cron debian email error-handling curl

5
推荐指数
2
解决办法
1591
查看次数

是否可以自定义提示以显示是否有任何后台作业?

是否可以自定义 bash 提示以显示是否有任何后台作业?我发现很容易忘记有后台工作。

说如果提示是...

$
Run Code Online (Sandbox Code Playgroud)

有没有办法让它显示后台作业的数量?例如,如果有两个后台作业使用 发送到后台CTRL+Z,则提示将是...

2 $
Run Code Online (Sandbox Code Playgroud)

bash prompt jobs background-process

5
推荐指数
1
解决办法
2048
查看次数

crontab 作业可以与自身同时运行吗?

如果我有一个 crontab 作业,例如每小时运行一次,但该作业可能需要一个多小时才能完成,下一个作业是否会无法运行?

cron

5
推荐指数
1
解决办法
5257
查看次数

如何在文本文件中找到重复的行,而有些可能被注释掉或在开头有不同的标记?

我有一个文本文件,其中的行是这样的混合:

###  Comments

# Comments
86.242.200.81 banana.domain.net          # comment
86.242.200.3 orange.domain.net
31.28.225.81 monkey.anotherdomain.net

51.18.33.4 puffin.domainz.com
#31.28.220.80 monkey.anotherdomain.net   # comment
86.242.201.3 orange.domain.net
Run Code Online (Sandbox Code Playgroud)

如何找到 host.domain 重复项?

在这种情况下,有两个: monkey.anotherdomain.netorange.domain.net

考虑到..

  • 需要忽略条目后的尾随注释,因为它们可能不在副本上。
  • 如果该行被注释掉,则仍应找到重复项。
  • 应忽略 IP 地址的差异。

text-processing uniq

5
推荐指数
1
解决办法
5551
查看次数

$(logname) 的意义是什么?

sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)' & sudo chmod 440 /etc/sudoers.d/$(logname)
Run Code Online (Sandbox Code Playgroud)

我使用上面的 one-liner 允许当前用户在远程连接的主机上执行 sudo 无需密码。

但究竟是$(logname)什么?

在本地机器上,echo $(logname)什么都不返回,而echo $LOGNAME会,所以它不是环境变量,尽管我从未见过远程机器上的值有任何不同。

另外,是否还有其他类似的$(foo)变量(或它们的名称)?

environment-variables

5
推荐指数
1
解决办法
436
查看次数

在 ssh 配置中,“匹配规范全部”是什么意思?

我想在我的 ssh 配置中使用它CanonicalizeHostname,这样就可以添加和删除主机,而无需编辑文件。

Host bastion
    ProxyJump none

Match canonical
    ProxyJump bastion
    ForwardAgent yes

Host *
    ForwardAgent no
    CanonicalizeHostname always
    CanonicalDomains mydomain.co.uk
    CanonicalizeMaxDots 0
    CanonicalizeFallbackLocal yes
Run Code Online (Sandbox Code Playgroud)

ssh-agent 没有被转发到我的任何服务器。如果我将其更改ForwardAgentHost *“是”,那么它将被转发。因为ForwardAgent下面Match canonical没有被解析,所以我认为存在错误,并向 OpenSSH 做了报告(该报告已被删除)。

有人向我解释说它正在按预期工作:

启用主机名规范化后,配置将被解析两次。初始阶段收集选项,然后在主机名最终确定后进行第二阶段。大多数配置选项都是“首场比赛获胜”

所以这里发生的事情是,在第一次传递时,您的“Host *”块正在被解析,并且 ForwardAgent 选项被设置为“no”。在后续传递中,“Match canonical”块中的 ForwardAgent 指令将被忽略,因为它已经设置。

我能理解。我知道它被解析了两次并CanonicalizeHostname启用了,但我没有意识到这样做的结果。

我不明白的是避免这种情况的方法“仅在最后一次设置后备 ForwardAgent”:

Host bastion
    ProxyJump none

Match canonical
    ProxyJump bastion
    ForwardAgent yes

Match all
    CanonicalizeHostname always
    CanonicalDomains mydomain.co.uk
    CanonicalizeMaxDots 0
    CanonicalizeFallbackLocal yes

Match canonical all
    ForwardAgent no …
Run Code Online (Sandbox Code Playgroud)

ssh ssh-config

5
推荐指数
1
解决办法
1600
查看次数

如何使用sed从另一个文件中删除一个文件中的相同行?

我有两个文件,一个是另一个的超集。我想从较大的文件中删除较小文件中的相同行。

一种可能的复杂情况是这些行包含反斜杠。

我该怎么做呢?

sed text-processing

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