.bashrc
我在远程主机上有以下内容:
#!/bin/bash
DEFAULT=$PS1
PS1="\h:\w\$ "
source ~/.bash_aliases
if [[ $(hostname -s) = host_name ]]; then
source /path/somescript.sh
fi
当我使用远程主机作为目标时,将执行-rsync
内的命令。当我使用 远程主机作为 的目标时,我不想执行此命令。我只想在使用 访问远程主机时执行此命令。if
fi
rsync
ssh
是否存在一个变量可以区分这两种情况?
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)之后)。