ฟังก์ชั่นทุบตีกับพารามิเตอร์ที่ไม่สามารถใช้ได้กับ eval ใน Msys2


0

ฉันใช้ Msys2 จาก PortableApps ภายใต้ Win 10 คำตอบสำหรับคำถามนี้ (เช่นการระบุตัวตนและการแก้ไขปัญหา) อาจเกี่ยวข้องกับส่วนของ Unix / Linux ของการใช้งานหรือ "การปรับตัว" กับ Windows ผ่าน Msys2 ฉันไม่ทราบล่วงหน้า (ไม่เช่นนั้นฉันอาจจะแก้ไขได้ด้วยตัวเอง!) ดังนั้นฉันจึงโพสต์ก่อนหน้า (ลบออกตอนนี้) คำถามที่คล้ายกันในเว็บไซต์ SE อื่น ซึ่งเข้าถึงผู้ชมที่แตกต่างกัน

ฉันมีฟังก์ชั่นของเชลล์ที่กำหนดไว้ my_fun.sh เช่น

MYAPP=some_executable
function myfun() { echo "MYAPP=${MYAPP}" && ${MYAPP} "$@" ; }

นั่นคือ some_executable ใช้ตัวเลือกและพารามิเตอร์ ฉันสามารถเรียกใช้ที่บรรทัดคำสั่ง

$ some_executable -3 input.dat output.dat

ตอนนี้ถ้าฉันเรียกใช้จากเชลล์สคริปต์ myscript.sh

comm="myfun -3 input.dat output.dat"
echo ${comm}
eval ${comm}

(กับ echo ฉันแน่ใจว่าบรรทัดคือสิ่งที่ฉันต้องการ) ฉันเข้าใจ

./myscript.sh: line 8: myfun: command not found

ถ้าฉันทำ export -f myfun แล้ว ./myscript.sh ฉันเริ่มได้รับ

MYAPP=
environment: -3: command not found

ซึ่งแสดงแหล่งที่มาของปัญหา (ขอบคุณที่คอมเม้นต์โดย Kamil M)

ในกล่อง Ubuntu ก่อนหน้านี้ export -f ... ฉันได้รับข้อผิดพลาดเช่นเดียวกับข้างต้น แต่ export แก้ไขปัญหา

อะไรคือสาเหตุของสิ่งนี้? มันเกี่ยวข้องกับการใช้งาน Linux / Bash แท้หรือแยกวิเคราะห์, การขยายเชลล์, การสืบทอดเชลล์, ฯลฯ ภายใต้ Msys2 แตกต่างกันเล็กน้อยหรือไม่? ฉันจะแก้ไขได้อย่างไรในลักษณะที่สคริปต์เดียวกันทำงานภายใต้ Msys2 และ Ubuntu

ที่เกี่ยวข้อง: https://unix.stackexchange.com/questions/444946/how-can-we-run-a-command-stored-in-a-variable


อะไร #! ล่ามสคริปต์ของคุณใช้? คุณกำลังใช้เวอร์ชันทุบตีรุ่นใด
grawity

@grawity - 1) #! / bin / bash 2) 4.4.19 (3) -release (i686-pc-msys)
sancho.s


-3: command not foundดังนั้นฉันสงสัย MYAPP มันว่างเปล่า. มันกำหนดไว้ในสคริปต์เดียวกันหรือไม่ ถ้าไม่ส่งออกหรือไม่
Kamil Maciorowski

@KamilMaciorowski - คุณพูดถูก ฉันต้องแก้ไขมันแล้ว
sancho.s

คำตอบ:


1

ฉันต้อง

export MYAPP=some_executable

ใน my_fun.sh. จากนั้นสคริปต์อื่นอ่านค่าของตัวแปร

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