ฉันใช้ 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
-3: command not found
ดังนั้นฉันสงสัย MYAPP
มันว่างเปล่า. มันกำหนดไว้ในสคริปต์เดียวกันหรือไม่ ถ้าไม่ส่งออกหรือไม่
#!
ล่ามสคริปต์ของคุณใช้? คุณกำลังใช้เวอร์ชันทุบตีรุ่นใด