Вам необходимо правильно установить переменную LANG.
Если вы хотите изменить язык только для mutt, вы можете запустить команду, например:
LANG=en_US.UTF-8 mutt
Как объяснил pLumo , ваш тест всегда будет успешным.
Что вам нужно сделать, так это проверить, расширяется ли ваш паттерн $SSHPATH/$ID.*
во что-то. Это отличается от проверки с помощью -f
, является ли это обычным файлом, поскольку шаблон может расширяться до нескольких имен, а проверка -f
может применяться только к одному пути.
Локально это можно сделать с помощью
set -- "$SSHPATH/$ID".*
if [ -e "$1" ]; then...; fi
Это установит позиционные параметры ($1
, $2
и т. д. )на имена, соответствующие шаблону, указанному в set
. Операторы if
затем проверяют, является ли первое совпадение существующим именем (шаблон останется нераскрытым в большинстве оболочек, если он ничему не соответствует ).
Чтобы выполнить это черезssh
:
ssh user@host "set -- '$SSHPATH/$ID'.*; [ -e \"\$1\" ]"
Нечеткие кавычки гарантируют, что $SSHPATH
и $ID
расширяются локальной оболочкой , а "$1"
расширяются удаленно.
Это даст вам нулевой статус выхода ("успешно" ), если шаблон соответствует существующему имени, и не -нулевой ("неудачный" ), если нет (. ] или если ssh
каким-то образом не удалось ).
Вы можете использовать это в операторе if
следующим образом:
if ssh user@host "set -- '$SSHPATH/$ID'.*; [ -e \"\$1\" ]"; then
# do something for success
else
# do something for failure
fi
Чтобы проверить отсутствие-существования, отмените тест:
if ssh user@host "set -- '$SSHPATH/$ID'.*; [ ! -e \"\$1\" ]"; then
# do something for failure
else
# do something for success
fi
Я проигнорировал использование вами sshpass
, но вы можете просто добавить префикс ssh
с ним, как вы сделали в вопросе.
Ваша первая команда аналогична
if [ "some string" ]; then... fi
что всегда будет верно.
Вторая команда почти правильная, но вам нужно поместить !
в кавычки или экранировать ее, иначе она будет интерпретирована вашей оболочкой.
Двойные кавычки всей команды и одинарные кавычки пути, чтобы избежать проблем со специальными символами внутри пути. Убедитесь, что *
находится вне одинарных кавычек :
if sshpass -p "$SSHPASS" ssh root@$SSHHOST "test ! -f '$SSHPATH/$ID.'*"; then... fi
Если ваш шаблон соответствует нескольким файлам, тест завершится неудачно .