如何在“.bashrc”脚本中区分 Rsync 和 SSH 访问

如何在“.bashrc”脚本中区分 Rsync 和 SSH 访问

.bashrc我在远程主机上有以下内容:

 #!/bin/bash

 DEFAULT=$PS1
 PS1="\h:\w\$ "
 source ~/.bash_aliases
 if [[ $(hostname -s) = host_name ]]; then
    source /path/somescript.sh
 fi

当我使用远程主机作为目标时,将执行-rsync内的命令。当我使用 远程主机作为 的目标时,我不想执行此命令。我只想在使用 访问远程主机时执行此命令。iffirsyncssh

是否存在一个变量可以区分这两种情况?

FWIW,我在运行时收到警告rsync,我无法进入ssh

/path/somescript.sh: line 1: module: command not found

答案1

这听起来你其实想区分交互的SSH 访问。

Rsync 仍然通过 SSH 进行,SFTP、Git、Borg 和其他几种工具,甚至 也是如此ssh example.host some_command。它们的共同点是它们都是非交互式的,并且不分配 tty——它们都希望 SSH 提供干净的数据隧道,并且同样都不需要 $PS1 或 bash_aliases。这里 Rsync 没有什么特别之处。

为了区分这两种模式,请$-在 ~/.bashrc 顶部附近添加一个检查:

[[ $- == *i* ]] || return 0

最重要的是,这应该在任何事物这将产生输出。通常,它可以作为 ~/.bashrc 中的第一件事来完成(除非在设置环境变量(如 PATH)之后)。

相关内容