Итак, снижение размера MTU решило все мои проблемы с вводом-выводом через SSHFS. Как указал @roaima, проблемы, вероятно, были вызваны тем, что брандмауэр университетского сервера слишком активно блокировал пакеты ICMP.
Спасибо @roaima за помощь в решении этой проблемы. И спасибо @derobert за предложение снизить MTU.
if ! [[ CONDITION ]]; then
Первый !
взят из синтаксиса конвейера:
A pipeline is a sequence of one or more commands separated by one of the control
operators | or |&. The format for a pipeline is:
[time [-p]] [ ! ] command [ [|⎪|&] command2... ]
If the reserved word ! precedes a pipeline, the exit status of that pipeline is
the logical negation of the exit status as described above.
Ваш второй пример:
if [[ ! CONDITION ]]; then
является выражением:
[[ expression ]]
Execute conditional command.
! EXPRESSION True if EXPRESSION is false; else false
для одного условия они оба одинаковы:
$ if [[ ! 1 = 1 ]]; then echo true; else echo false; fi
false
$ if ! [[ 1 = 1 ]]; then echo true; else echo false; fi
false
разница возникает при тестировании нескольких условий:
$ if [[ ! 1 = 2 || 2 = 2 ]]; then echo true; else echo false; fi
true
$ if ! [[ 1 = 2 || 2 = 2 ]]; then echo true; else echo false; fi
false
поэтому внешнее отрицание имеет больший приоритет над результатом.
Конечно, вы можете применить внутреннее отрицание ко всему условию, поэтому в этом случае вы предпочтете вместо этого использовать внешнее отрицание:
$ if [[ ! ( 1 = 2 || 2 = 2 ) ]]; then echo true; else echo false; fi
false
В первом отрицание осуществляется с помощью if
. Это 2-й делается [[
. В простом случае это не имеет значения.
Однако иногда необходимы оба, например.
if [[ ! a && b ]]
[[
нужна эта способность. if ! ls
теперь это нужно if
.