Intereting Posts
Установка пакета (изящество) с использованием yum на CentOS Почему команда ls не перечисляет огромные файлы? Останавливается ли в запланированных задачах после перезагрузки? Использование опции less's show show line Как разобрать пространства имен из XML-файла с помощью XMLLINT и BASH Как заставить дисплей заснуть, когда экран заблокирован? По умолчанию выполняются ли команды терминала? Прерывание последовательного порта Hook в FreeBSD Получить список установленных принтеров распаковать каталог * .tgz файлов с помощью шаблона Как создать обобщенный бинарный архив для SageMath? Как ограничить пользователя SSH разрешать только SSH-туннелирование? Избегайте буферизации вывода для группы команд (фигурные скобки) в сценарии bash Как я могу сделать графический график последовательности чисел из стандартного ввода? Ошибка SELinux при установке Awesome WM-пакетов

Запустите скрипт через ssh и оцените некоторые var / comand внутри хоста

Я создаю скрипт для переноса некоторых данных между серверами.

Моя головная боль:

(…)
ssh -t -i ${KEY} ${USER}@${HOST} "cd /home/${ACCOUNT}/var/${DOMAIN}/ && tar cf - mail/ -P | pv -s $(du -sb mail/ | awk '{print $1}') | gzip > mail.tar.gz"

Эта команда возвращает что-то вроде «Я не могу найти почтовую папку», и я думаю, что знаю почему.

Эта команда оценивается перед подключением ssh pv -s $(du -sb mail/ | awk '{print $1}') , и почтовая папка не существует на первом сервере. Но если я жестко закодирую текущий размер байта, скрипт будет работать.

Как я могу обойти эту ситуацию?

Я бы использовал ' но уже используется в '{print $1}' , также пытался создать другую переменную для размещения чего-то вроде 'pv -s $(du -sb mail/ | awk \'{print $1}\') ' но все же не повезло, я пробовал так много возможностей с нормальными и двойными кавычками.

PS: простите за мой “ангриш”

Оффтоп: Мне бы очень хотелось, если бы кто-нибудь указал мне какую-нибудь хорошую статью (или какое-нибудь ключевое слово для поиска), чтобы объяснить / показать все возможности объявления, отображения и оценки переменных, я не знаю правильной терминологии. Например, $ {var} и $ var, что делает echo при использовании " или ' , и как избежать дублирования кавычек, двойных кавычек, конкатенации и т. Д.


Полный пример скрипта:

 clear printf "\n\n" echo "******************************** INTERWORX --> CPANEL *************************************" printf "\n\n" USER=root HOST=xxx.xxx.xxx.xxx PORT=xxxx KEY=/var/somewhere # ---------------- ACCOUNT=myaccount DOMAIN=example.com printf " ► ---------------------- [ ${HOST} ]\n" printf " ►►---------------------- \n" ssh -t -i ${KEY} ${USER}@${HOST} "cd /home/${ACCOUNT}/var/${DOMAIN}/ && tar cf - mail/ -P | pv -s \$(du -sb mail/ | awk '{print $1}') | gzip > mail.tar.gz" printf "\n ►►► ------------ [ mail.tar.gz ]\n\n" scp -i ${KEY} ${USER}@${HOST}:/home/${ACCOUNT}/var/${DOMAIN}/mail.tar.gz . ( ... ) - clear printf "\n\n" echo "******************************** INTERWORX --> CPANEL *************************************" printf "\n\n" USER=root HOST=xxx.xxx.xxx.xxx PORT=xxxx KEY=/var/somewhere # ---------------- ACCOUNT=myaccount DOMAIN=example.com printf " ► ---------------------- [ ${HOST} ]\n" printf " ►►---------------------- \n" ssh -t -i ${KEY} ${USER}@${HOST} "cd /home/${ACCOUNT}/var/${DOMAIN}/ && tar cf - mail/ -P | pv -s \$(du -sb mail/ | awk '{print $1}') | gzip > mail.tar.gz" printf "\n ►►► ------------ [ mail.tar.gz ]\n\n" scp -i ${KEY} ${USER}@${HOST}:/home/${ACCOUNT}/var/${DOMAIN}/mail.tar.gz . ( ... ) 

Так как вы упомянули опции отладки в ваших комментариях, я думаю, что этот ответ заслуживает:

Используйте set -x как самую первую команду в последовательности

 ssh -t -i ${KEY} ${USER}@${HOST} "set -x ; cd /home/${ACCO ....." 

это ясно показывает точку сбоя в вашем случае:

не избежал $ 1

 .... ++ du -sb mail/ + pv -s 12314 mail/ # <<< awk printed all the line instead of expected just 1st column with size and that ruined the command pv: mail/: read failed: Is a directory ... 

против сбежал

 .... ++ du -sb mail/ + pv -s 12314 # <<< pv gets expected number 10kiB 0:00:00 [ 184MiB/s] [======= ....