Saya perlu menjalankan skrip jarak jauh menggunakan sshvia Ruby( net / ssh ) untuk menyalin folder secara rekursif dan mengecualikan subfolder. Saya mencari cara tercepat untuk melakukannya sehingga rsynctidak baik. Juga, saya mengerti bahwa sshmenggunakan shdan tidak bash.
Dalam bash saya lakukan:
cp -r srcdir/!(subdir) dstdir
dan itu bekerja dengan baik. Namun ketika saya meluncurkan skrip melalui sshsaya menerima kesalahan
sh: 1: Syntax error: "(" unexpected
karena menggunakan sh.
Saya telah memeriksa shhalaman manual, tetapi tidak ada opsi untuk mengecualikan file.
Apakah asumsi saya sshmenggunakan yang shbenar? Ada saran alternatif?
EDIT 1:
Dalam hal ini berguna, output dari sudo cat /etc/shellsadalah 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.