Как Bash может определить, запущен ли он из-за rsync по ssh?

Первый символ ls , являющийся s , означает, что этот файл является сокетом .

Это немного похоже на сокет TCP, но для связи между клиентом и серверным процессом на одной машине, используя в качестве имени файловую систему / путь / к / сокету вместо номера порта TCP.

Вы можете узнать больше о сокетах с помощью man 2 socket , но это немного технически.

2
02.03.2016, 18:52
2 ответа

Если вы ищете решение, чтобы определить, запускаете ли вы интерактивный сеанс, это может помочь:

if [[ $- == *i* ]]
then
  echo "You are in interactive mode
else
  echo "Non-Interactive session"
fi
1
27.01.2020, 21:54

Вызов rsync через ssh, как указано выше (без других параметров подключения), приведет к тому, что удаленный sshd создаст подпроцесс, подобный этому (при условии, что ваша оболочка по умолчанию на удаленном хосте - bash):

bash -c rsync --server [-options] [--long-options] ...

Эта оболочка является источником вашего init-файл и поэтому в вашем файле инициализации вы можете использовать переменную оболочки

BASH_EXECUTION_STRING
      The command argument to the -c invocation option.

следующим образом:

if [[ "$BASH_EXECUTION_STRING" == rsync\ --server\ * ]]; then return; fi

Оболочки, порождаемые обычными (не-rsync) SSH-соединениями, не будут соответствовать этой команде и поэтому будут вести себя нормально.

6
27.01.2020, 21:54

Теги

Похожие вопросы