Câu trả lời:
Shell cục bộ của bạn diễn giải các ${i}
dấu ngoặc kép bên trong ( "
), vì vậy lệnh sẽ hoạt động để
ssh user@some.serv.er "for i in /tmp/foo* ; do echo; done"
Chỉ cần sử dụng dấu ngoặc đơn ( '
) thay vào đó và vấn đề của bạn sẽ biến mất:
ssh user@${server} 'for i in /tmp/foo* ; do echo $i; done'
Chỉ gặp vấn đề này một chút và giải pháp được đưa ra, trong khi nó không hoạt động quá hiệu quả nếu bạn cũng lấy các biến từ shell cục bộ, trước ssh bạn tạo một mảng để lặp lại. Một chút rắc rối hơn một chút sẽ là thoát khỏi $ ban đầu để nó được
"for i in /tmp/foo* ; do echo \${i}; done"
Mà sẽ thoát nó trong cấu trúc cục bộ, không phải là vỏ ssh được gọi.
Tôi đã cập nhật câu trả lời ở trên để có được cổng từ một danh sách quá.
for i in {10.21.xxx.yyy,10.21.xxx.yyy,10.23.xxx.yyy};
do
for j in {5501,5502,5503,5504,7701,7702,7703,7704,5551,5552,5553,7771,7772,7773};
do
(echo > /dev/tcp/${i}/${j}) > /dev/null 2>&1 && echo "${i}:${j} :: it's getting connected" || echo "${i}:${j} :: it's not connecting"
done
done
--sshlogin
.