Saya perlu menjalankan skrip jarak jauh menggunakan ssh
via Ruby
( net / ssh ) untuk menyalin folder secara rekursif dan mengecualikan subfolder. Saya mencari cara tercepat untuk melakukannya sehingga rsync
tidak baik. Juga, saya mengerti bahwa ssh
menggunakan sh
dan tidak bash
.
Dalam bash saya lakukan:
cp -r srcdir/!(subdir) dstdir
dan itu bekerja dengan baik. Namun ketika saya meluncurkan skrip melalui ssh
saya menerima kesalahan
sh: 1: Syntax error: "(" unexpected
karena menggunakan sh
.
Saya telah memeriksa sh
halaman manual, tetapi tidak ada opsi untuk mengecualikan file.
Apakah asumsi saya ssh
menggunakan yang sh
benar? Ada saran alternatif?
EDIT 1:
Dalam hal ini berguna, output dari sudo cat /etc/shells
adalah sebagai berikut:
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/tmux
/usr/bin/screen
EDIT 2:
Oke. Jadi bash itu tersedia dan sepertinya tidak menjadi masalah. Saya telah memverifikasi bahwa ssh sebenarnya menggunakan bash
. Masalah ini tampaknya terkait dengan keluarnya tanda kurung atau tanda seru. Saya telah mencoba menjalankan perintah dari shell (macos) dan ini adalah perintah yang sebenarnya:
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'
Dengan cara ini saya menerima kesalahan yang berbeda
cp: cannot stat '/home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!(constant)': No such file or directory
EDIT 3:
Berdasarkan komentar saya telah mengubah perintah saya menambahkanextglob
Jika saya gunakan
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'
Saya menerima kesalahan berikut:
cp: cannot stat '/home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!(constant)': No such file or directory
Jika saya tidak lepas kurung saya dapatkan
bash: -c: line 0: syntax error near unexpected token `('
ssh
(wellsshd
) menggunakan shell login dari pengguna jarak jauh. Bisa apa saja.