Tất nhiên, bạn có thể đặt biến môi trường bên trong lệnh, tuy nhiên bạn sẽ phải cẩn thận khi trích dẫn: hãy nhớ rằng trình bao của bạn sẽ phân tích dòng lệnh cục bộ của bạn, và sau đó trình điều khiển từ xa sẽ đi theo chuỗi nhận.
Nếu bạn muốn một biến có cùng giá trị trên máy chủ mà nó có trên máy khách, hãy thử SendEnv
tùy chọn:
ssh -o SendEnv = MYVAR server.example.com mycommand
Điều này đòi hỏi sự hỗ trợ từ máy chủ, mặc dù. Với OpenSSH, tên biến phải được cấp phép /etc/sshd_config
.
Nếu máy chủ chỉ cho phép một số tên biến cụ thể, bạn có thể làm việc xung quanh đó; ví dụ: thiết lập chung cho phép LC_*
thông qua và bạn có thể thực hiện các thao tác sau:
ssh -o SendEnv = LC_MYVAR máy chủ.example.com 'MYVAR = $ LC_MYVAR; bỏ đặt LC_MYVAR; xuất khẩu MYVAR; Lệnh của tôi'
Nếu thậm chí LC_*
không phải là một tùy chọn, bạn có thể truyền thông tin trong TERM
biến môi trường, luôn được sao chép (tuy nhiên có thể có giới hạn độ dài). Bạn vẫn phải đảm bảo rằng trình điều khiển từ xa không hạn chế TERM
biến để chỉ định loại thiết bị đầu cuối đã biết. Chuyển -t
tùy chọn sang ssh nếu bạn không bắt đầu trình bao tương tác từ xa.
env TERM = "thông tin bổ sung: $ TERM" ssh -t server.example.com 'MYVAR = $ {TATE%: *}; HẠN = $ {HẠN ## *:}; xuất khẩu MYVAR; Lệnh của tôi'
Một khả năng khác là xác định biến trực tiếp trong lệnh:
ssh -t server.example.com 'export MYVAR = "thông tin bổ sung"; Lệnh của tôi'
Do đó, nếu truyền một biến cục bộ:
ssh -t server.example.com 'export MYVAR =' "'$ LOCALVAR'" '; Lệnh của tôi'
Tuy nhiên, hãy cẩn thận khi trích dẫn các vấn đề: giá trị của biến sẽ được nội suy trực tiếp vào đoạn mã shell được thực thi ở phía xa. Ví dụ cuối cùng ở trên giả định rằng $LOCALVAR
không chứa bất kỳ dấu ngoặc đơn nào ( '
).