เป็นไปได้ไหมที่จะให้ SSH ส่งต่ออาร์กิวเมนต์ที่ว่างเปล่า?


0

ฉันพยายามเรียกใช้สคริปต์ระยะไกลด้วย SSH และสคริปต์นี้เปลี่ยนพฤติกรรมของมันขึ้นอยู่กับว่าอาร์กิวเมนต์ที่ระบุนั้นว่างเปล่าหรือไม่ นี่คือตัวอย่างเล็กน้อยที่ฉันสร้างtmp.shไฟล์อย่างง่ายที่สะท้อนจำนวนข้อโต้แย้งแล้วข้อโต้แย้งคืออะไร เมื่อฉันรันมันแบบโลคัลมันทำงานได้ตามที่คาดไว้โดยมีอาร์กิวเมนต์ 3 ข้อ แต่เมื่อฉันรันสคริปต์ผ่าน SSH มันบอกว่ามันมีเพียง 2 ข้อโต้แย้ง:

$ cat argtest.sh 
#!/bin/bash

echo $#
echo $@
$ ./argtest.sh foo '' bar
3
foo bar
$ ssh user@localhost ./argtest.sh foo '' bar
2
foo bar

มีวิธีที่จะให้ SSH ส่งต่ออาร์กิวเมนต์ที่ว่างเปล่าดังนั้นสคริปต์บอกว่ามันมี 3 ข้อโต้แย้ง?

คำตอบ:



1

ฉันทำสิ่งที่คล้ายกับการร้องขอ Perl ระยะไกลของฉันซึ่งควรทำงานกับสคริปต์ทุบตีของคุณเช่นกัน - ด้วยการเปลี่ยนแปลงไวยากรณ์ของ bash แน่นอน ...

ใช้ตัวแปรสภาพแวดล้อมเพื่อ "ส่งผ่านตัวแปร" (ตั้งค่าหรืออื่น ๆ ) กับกระบวนการรีโมต ตัวอย่างเช่น

$ ssh me@localhost 'VAR1="var1 text" /tmp/try.pl'

จากนั้นในสคริปต์ระยะไกลของคุณเพียงตรวจสอบการมีอยู่ของตัวแปรเช่นเดียวกับใน:

$ cat /tmp/try.pl
#!/usr/bin/perl
if ($ENV{VAR1}) { print "$ENV{VAR1}\n"; }
if ($ENV{VAR2}) { print "$ENV{VAR2}\n"; }

ดังนั้นเมื่อมีการเรียกข้างต้น

$ ssh me@localhost 'VAR1="var1 text" /tmp/try.pl'
var1 text

อย่างที่คุณเห็นฉันสามารถตรวจสอบการมีอยู่ของตัวแปรอินพุตในการโทรระยะไกล

สิ่งนี้น่าจะเหมาะกับคุณ


น่าสนใจ ไอเดียเรียบร้อย
Cornstalks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.