Tôi cần chạy một tập lệnh từ xa bằng cách sử dụng ssh
thông qua Ruby
( net / ssh ) để sao chép đệ quy một thư mục và loại trừ thư mục con. Tôi đang tìm cách nhanh nhất để làm điều đó rsync
là không tốt. Ngoài ra, tôi hiểu rằng ssh
sử dụng sh
và không bash
.
Trong bash tôi làm:
cp -r srcdir/!(subdir) dstdir
và nó hoạt động tốt. Tuy nhiên khi tôi khởi chạy tập lệnh thông qua ssh
tôi nhận được lỗi
sh: 1: Syntax error: "(" unexpected
bởi vì nó được sử dụng sh
.
Tôi đã kiểm tra sh
trang man, nhưng không có tùy chọn để loại trừ các tập tin.
Đó có phải là giả định của tôi về ssh
việc sử dụng sh
đúng? Bất kỳ đề nghị thay thế?
EDIT 1:
Trong trường hợp nó hữu ích, đầu ra của sudo cat /etc/shells
:
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/tmux
/usr/bin/screen
EDIT 2:
OK. Vì vậy, bash nó có sẵn và đó dường như không phải là vấn đề. Tôi đã xác minh rằng ssh thực sự đang sử dụng bash
. Vấn đề dường như có liên quan đến việc thoát dấu ngoặc đơn hoặc dấu chấm than. Tôi đã thử chạy lệnh từ shell (macos) và đây là lệnh thực tế:
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'
Theo cách này tôi nhận được một lỗi khác
cp: cannot stat '/home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!(constant)': No such file or directory
EDIT 3:
Dựa trên các ý kiến tôi đã thay đổi lệnh thêmextglob
Nếu tôi sử dụng
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'
Tôi nhận được lỗi sau:
cp: cannot stat '/home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!(constant)': No such file or directory
Nếu tôi không thoát khỏi dấu ngoặc đơn tôi nhận được
bash: -c: line 0: syntax error near unexpected token `('
ssh
(cũngsshd
) sử dụng shell đăng nhập của người dùng từ xa. Có thể là bất cứ thứ gì.