ฉันมีปัญหาเกี่ยวกับเชลล์ที่แปลกประหลาดโดยมีคำสั่งใน $ PATH ว่าเชลล์ (ksh, ที่ทำงานบน Linux) ดูเหมือนจะขี้ขลาดปฏิเสธที่จะเรียกใช้ ฉันจะได้รับ:
# mycommand
/bin/ksh: mycommand: not found [No such file or directory]
แต่ไฟล์สามารถพบได้โดยที่:
# which mycommand
/home/me/mydir/admbin/mycommand
ฉันยังเห็นอย่างชัดเจนว่าไดเรกทอรีใน $ PATH:
# echo $PATH | tr : '\n' | grep adm
/home/me/mydir/admbin
exe ที่ตำแหน่งนั้นดูเหมือนปกติ:
# file /home/me/mydir/admbin/mycommand
/home/me/mydir/admbin/mycommand: setuid setgid ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.4, dynamically linked (uses shared libs), not stripped
# ls -l mycommand
-r-sr-s--- 1 me mygroup 97892 2012-04-11 18:01 mycommand
และถ้าฉันใช้มันอย่างชัดเจนโดยใช้เส้นทางที่ผ่านการรับรองอย่างสมบูรณ์:
# /home/me/mydir/admbin/mycommand
ฉันเห็นผลลัพธ์ที่คาดหวัง มีบางสิ่งที่ทำให้เกิดความสับสนในเปลือกหอยที่นี่ แต่ฉันก็กำลังสูญเสียสิ่งที่มันอาจจะเป็น?
แก้ไข: ค้นหาสิ่งที่ดูเหมือนคำถามที่คล้ายกัน: ไบนารีจะไม่ทำงานเมื่อทำงานกับเส้นทาง เช่น> ./ โปรแกรมจะไม่ทำงาน แต่> โปรแกรมทำงานได้ดี
ฉันยังทดสอบคำสั่งดังกล่าวมากกว่าหนึ่งคำสั่งใน $ PATH ของฉัน แต่ค้นหาเพียงคำสั่งเดียว:
# for i in `echo $PATH | tr : '\n'` ; do test -e $i/mycommand && echo $i/mycommand ; done
/home/me/mydir/admbin/mycommand
EDIT2:
เมื่อเช้านี้ปัญหาได้หายไปและตอนนี้ฉันสามารถดำเนินการปฏิบัติการได้แล้ว
นั่นอาจเป็นการตรวจสอบข้อเสนอแนะในการออกจากระบบและการเข้าสู่ระบบ แต่ฉันได้ทำเมื่อคืนที่ผ่านมาโดยไม่ประสบความสำเร็จ การออกจากระบบ / การเข้าสู่ระบบนั้นควรทำเช่นเดียวกันกับการรันคำสั่ง 'hash -r' ที่แนะนำ (fwiw ใดที่ดูเหมือนว่าจะเป็น ksh builtin และไม่ใช่แค่ bash builtin)
ในการตอบกลับบางคำตอบ:
นี่เป็นไฟล์เรียกทำงานที่ไม่ใช่สคริปต์ (ดูการอ้างอิงของ ELF ในเอาต์พุตคำสั่งไฟล์)
ฉันไม่คิดว่า strace จะช่วยได้ ที่จบลงด้วยการบังคับให้คำสั่งดำเนินการแบบเต็ม ฉันคิดว่าฉันสามารถทำ strace ที่แนบกับเชลล์ปัจจุบันได้ แต่เนื่องจากฉันไม่สามารถทำซ้ำได้อีกต่อไปจึงไม่มีจุดทดลองอีกต่อไป
ไม่มีเครื่องหมายอัฒภาคใน $ PATH เนื่องจากฉันไม่สามารถพูดได้อีกต่อไปฉันจะไม่ส่งเสียงดังรบกวนคำถามนี้ด้วย $ PATH แบบเต็ม
การลองเปลือกอีกอัน (เช่นทุบตี) จะเป็นสิ่งที่ฉันอยากลองตามที่แนะนำ ด้วยปัญหาที่หายไปตอนนี้ฉันก็ไม่รู้ว่าจะช่วยได้หรือไม่
มันก็แนะนำให้ฉันคือการตรวจสอบสิทธิ์ไดเรกทอรี ทำเช่นนั้นสำหรับแต่ละไดเรกทอรีถึงหนึ่งนี้ฉันเห็น:
# ls -ld $HOME $HOME/mydir $HOME/mydir/admbin
drwxr-xr-x 10 me root 4096 2012-04-12 12:20 /home/me
drwxrwsr-t 22 me mygroup 4096 2012-04-12 12:04 /home/me/mydir
drwxr-sr-x 2 me mygroup 4096 2012-04-12 12:04 /home/me/mydir/admbin
ความเป็นเจ้าของไดเรกทอรี $ HOME ถูกทำให้ยุ่งเหยิง (ไม่ควรเป็นกลุ่มรูท) นั่นอาจทำให้เกิดปัญหาอื่น ๆ แต่ฉันไม่เห็นว่ามันจะทำให้เกิดปัญหานี้ได้อย่างไร