Первый символ ls
, являющийся s
, означает, что этот файл является сокетом .
Это немного похоже на сокет TCP, но для связи между клиентом и серверным процессом на одной машине, используя в качестве имени файловую систему / путь / к / сокету вместо номера порта TCP.
Вы можете узнать больше о сокетах с помощью man 2 socket
, но это немного технически.
Если вы ищете решение, чтобы определить, запускаете ли вы интерактивный сеанс, это может помочь:
if [[ $- == *i* ]]
then
echo "You are in interactive mode
else
echo "Non-Interactive session"
fi
Вызов 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-соединениями, не будут соответствовать этой команде и поэтому будут вести себя нормально.