lftp, stdout, stderr และ SAP exec_protocol

Oct 21 2020

เรามีสคริปต์ลินุกซ์เพื่อทำ SFTP ผ่านคีย์ที่แชร์ไว้ล่วงหน้า แต่เมื่อเร็ว ๆ นี้ผู้ขายต้องการคีย์และรหัสผ่านฉันเดาว่ามันคล้ายกับการพิสูจน์ตัวตนสองปัจจัย ดังนั้นผู้ขายจึงตรวจสอบสิทธิ์ด้วยคีย์ที่แชร์ล่วงหน้าจากนั้นแจ้งให้ป้อนรหัสผ่าน จนกว่าจะป้อนรหัสผ่านคุณจะได้รับการรับรองความถูกต้องเพียงบางส่วน ดังนั้นสคริปต์มาตรฐานของฉันจึงไม่ทำงาน เพื่อหลีกเลี่ยงปัญหานั้นฉันค้นพบว่าlftpสามารถส่งรหัสผ่านในสคริปต์และแก้ปัญหาการวางสคริปต์และรับไฟล์ได้ นี่คือสคริปต์ของฉัน:

     #!/bin/sh
     # ###########################
     # Parameters
     # $1 Source Directory # $2 Source File
     # $3 Target IP # $4 Target File
     # $5 Target Directory # $6 Mode (binary or ascii)
     # $7 User # $8 Pwd
     # ###########################
         lftp sftp://$7:$8@$3 -e "cd $5; put $1$2; bye"

สคริปต์นี้ถูกเรียกจากโปรแกรม SAP ABAP SXPG_COMMAND_EXECUTEโดยการเรียกฟังก์ชั่น EXEC_PROTOCOLข้อมูลกลับมาจากเชลล์สคริปต์มักจะมีการบันทึกในพารามิเตอร์ที่ส่งกลับมา ทั้งหมดทำงานได้ดีกับสคริปต์ทุบตีอื่น ๆ ทั้งหมด แต่lftpเราไม่ได้รับอะไรเลยจาก stdout เราได้รับข้อผิดพลาดดังนั้นฉันจึงถือว่ากำลังจับ stderr มีความคิดว่าทำไมถึงเป็นเช่นนี้?

คำตอบ

Jagger Oct 22 2020 at 13:35

ไม่เกี่ยวข้องกับ SAP หรือ ABAP ดูโพสต์ที่นี่ในServerFault.com

คำสั่งอาจบัฟเฟอร์เอาต์พุตดูคำตอบที่ยอมรับที่นั่นและพยายามยกเลิกการบัฟเฟอร์