Gọi một chức năng từ bên trong một chức năng


0

Tôi đang kết nối với một máy chủ có ssh bằng cách sử dụng connect6hàm, sau đó tôi phải gọi operationshàm từ bên trong connect6hàm để tiếp tục chạy các lệnh của nó.

Nếu tôi đặt tất cả các operationlệnh chức năng vào các connect6chức năng, tôi sẽ nhận được đầu ra mong muốn, nếu không tôi sẽ gặp lỗi : No file or directory.

connect6 () {
ssh -q root@example.com << EOF
if [ $? -eq 0 ]; then
    echo "Successfully Logged into the Server"
else
    echo "Check your credentials"
    exit
fi
$(operations)
EOF
}

operations(){
        cd /var/dist/test/
        sudo ./o
        echo "line 2 line 3" | sudo tee -a test.323
        sudo ./c
}

Cảm ơn

Câu trả lời:


0

Các operations()chức năng được xác định trong vỏ cục bộ của bạn.

Những thứ trong tài liệu ở đây của bạn đang được chuyển đến đầu vào tiêu chuẩn của vỏ từ xa của bạn.

Vì shell cục bộ và shell từ xa của bạn là hai quá trình khác nhau, điều này về cơ bản có nghĩa là bạn yêu cầu shell từ xa của bạn chạy một chức năng mà bạn chưa bao giờ nói với nó. Vì nó không biết về một chức năng hoặc bí danh được gọi operations, nên nó quay lại tìm kiếm thông qua (từ xa) của bạn PATHvà, khi không tìm thấy chương trình phù hợp, sẽ đưa ra lỗi bạn gặp.

Ba giải pháp có thể:

  1. Bao gồm phần thân operations()trong tài liệu ở đây của bạn và không bận tâm đến chức năng, vì bạn đã tìm thấy tác phẩm.
  2. Bao gồm toàn bộ định nghĩa operations()trong tài liệu của bạn ở đây. Tôi không chắc chắn nếu điều này mang lại cho bạn nhiều trong trường hợp cụ thể này qua tùy chọn 1, nhưng trong một kịch bản dài hơn hoặc nếu bạn sử dụng lại operations()nó có thể hữu ích hơn.
  3. Thêm operations()định nghĩa vào .bashrc hoặc tệp tự động tải tương tự của bạn trên máy tính từ xa. Điều này có nghĩa là bạn có thể bỏ định nghĩa từ tập lệnh của bạn ở đây.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.