1

У меня есть переменная настройки, как это:

SSH_EXEC="ssh -X -o ControlPath=~/.ssh/master-$$ -o ControlPersist=60"

Рассматриваемый параметр -X , потому что если я затем вызываю эту команду в моем локальном сценарии

$SSH_EXEC user@server "./server_script.sh $aFile"

который в двух словах делает следующее:

if [ -e /path/"$1".name ] || [ -e /path/"$1" ]
then 
   do something
else
   error
   echo "/path/"$1".name"
   exit
fi  

Все работает! Но если я заменю -X на -t , мой server_script завершится с ошибкой в else тесте. Я бы предпочел не использовать x11, но я не уверен, какая разница в том, что в одном случае происходит сбой, а в другом - переход.

РЕДАКТИРОВАТЬ

Поэтому я просто решил больше проблем и решил отобразить значение /path/$1.name на сервере, и оно искажено. Если мое имя $aFile оказалось hello.name результат эха показывает .nameello а также освобождает начало пути, когда я использую -t вместо -X .

Что может быть причиной искажения моих переменных?

1 ответ1

2

Переменная $aFile вероятно, имеет завершающий символ возврата каретки , в результате чего терминал возвращается к началу строки при обнаружении.

В качестве примера приведем следующее:

echo "/path/"hello^M".name"

выходы:

/.namehello

Такое может произойти из-за сценария оболочки с окончанием строки DOS, в результате чего строка

aFile = "hello"

быть интерпретированным как

aFile = "hello"^M

Если это так, вы сможете преобразовать свой сценарий в конец строки Unix с помощью утилиты dos2unix .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .