Мне нужно запустить удаленный скрипт , используя с ssh
помощью Ruby
( нетто / SSH ) рекурсивно скопировать папку и исключить папку. Я ищу самый быстрый способ сделать это, так что rsync
это не хорошо. Также я понимаю, что ssh
использует sh
и нет bash
.
В Bash я делаю:
cp -r srcdir/!(subdir) dstdir
и работает нормально. Однако, когда я запускаю скрипт через, ssh
я получаю сообщение об ошибке
sh: 1: Syntax error: "(" unexpected
потому что он использует sh
.
Я проверил sh
справочную страницу, но нет возможности исключить файлы.
Это мое предположение об ssh
использовании sh
правильно? Любое альтернативное предложение?
РЕДАКТИРОВАТЬ 1:
В случае, если это полезно, выдается sudo cat /etc/shells
следующее:
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/tmux
/usr/bin/screen
РЕДАКТИРОВАТЬ 2:
ОК. Так что Bash это доступно, и это, кажется, не проблема. Я убедился, что ssh на самом деле использует bash
. Эта проблема, по-видимому, связана с удалением скобок или восклицательного знака. Я попытался запустить команду из оболочки (MacOS), и это фактическая команда:
ssh -i .ssh/key.pem ubuntu@X.X.X.X 'mkdir /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N; cp -r /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!\(constant\) /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N; ln -s /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/constant /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N/constant'
Таким образом, я получаю другую ошибку
cp: cannot stat '/home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!(constant)': No such file or directory
РЕДАКТИРОВАТЬ 3:
На основе комментариев я изменил мою команду добавленияextglob
Если я использую
ssh -i .ssh/key.pem ubuntu@X.X.X.X 'shopt -s extglob; mkdir /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N; cp -r /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!\(constant\) /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N; ln -s /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/constant /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N/constant'
Я получаю следующую ошибку:
cp: cannot stat '/home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!(constant)': No such file or directory
Если я не уйду в скобки, я получу
bash: -c: line 0: syntax error near unexpected token `('
ssh
(хорошоsshd
) использует оболочку входа удаленного пользователя. Может быть что угодно.