在 Midnight Commander 中,可以使用以下方法与远程机器建立 SFTP 连接:
cd #sh:yourusername@example.com:/home/username/
Run Code Online (Sandbox Code Playgroud)
当远程机器使用非标准端口时,如何做到这一点?
我有一个源自.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 中使用。有什么办法可以阻止它解析该行吗?
我有一个 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) 我在 Debian 上有一份 cron 工作:
1 * * * * /home/paradroid/bin/myscript.sh >/dev/null
Run Code Online (Sandbox Code Playgroud)
有安装和配置的MTA,脚本有语法错误时我收到了电子邮件,所以我一直认为出现问题时会通知我。
该脚本curl通过代理下载文件。最近代理失败,curl无法下载。这是脚本中的最后一个命令,它一直以错误代码 7 退出。
我以为发生这种情况时我会收到电子邮件,但我没有。
我怎么会从脚本中的语法错误之类的东西中收到电子邮件警报,但是当脚本无法完成其工作并以错误代码退出时我没有收到它们?
有什么问题吗,或者我是否必须让脚本在出现错误时直接给我发电子邮件curl?
是否可以自定义 bash 提示以显示是否有任何后台作业?我发现很容易忘记有后台工作。
说如果提示是...
$
Run Code Online (Sandbox Code Playgroud)
有没有办法让它显示后台作业的数量?例如,如果有两个后台作业使用 发送到后台CTRL+Z,则提示将是...
2 $
Run Code Online (Sandbox Code Playgroud) 如果我有一个 crontab 作业,例如每小时运行一次,但该作业可能需要一个多小时才能完成,下一个作业是否会无法运行?
我有一个文本文件,其中的行是这样的混合:
### 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.net和orange.domain.net
考虑到..
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)变量(或它们的名称)?
我想在我的 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 没有被转发到我的任何服务器。如果我将其更改ForwardAgent为Host *“是”,那么它将被转发。因为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) 我有两个文件,一个是另一个的超集。我想从较大的文件中删除较小文件中的相同行。
一种可能的复杂情况是这些行包含反斜杠。
我该怎么做呢?