ไม่พบคำสั่งผ่านเชลล์สคริปต์ แต่ทำงานบนเทอร์มินัล


18

ในไฟล์. sh ของฉันฉันไม่สามารถเรียกคำสั่ง ant หรือ mv หรือ cp ได้ แต่คำสั่งเดียวกันรันบน terminal.below คือสคริปต์ของฉัน

ไฟล์ sample.sh

#! /bin/sh
cp filename.so filename_org.so
android update project -p .
ant clean
ant release

เพิ่มเส้นทางในไฟล์. bashrc

export PATH=$PATH:/usr/bin/

cp, mv, ant ทำงานได้ภายใต้เทอร์มินัลเท่านั้น


1
ให้เราข้อมูลเพิ่มเติมเกี่ยวกับปัญหา yur ..
Ruban ที่มีความชำนาญ

android/ ant, ไบนารีเหล่านี้อยู่ใน / usr / bin หรือไม่
UVV

คำตอบ:


13

เนื่องจากสคริปต์ของคุณเป็นเชลล์สคริปต์ ( /bin/sh) ดังนั้นPATHรายการของคุณใน.bashrcจะไม่ถูกอ่านเหมือนที่มีไว้สำหรับbash( /bin/bash) เชลล์แบบโต้ตอบ

ในการทำให้PATHรายการของคุณพร้อมใช้งานสำหรับ/bin/shสคริปต์ที่รันโดยผู้ใช้เฉพาะให้เพิ่มPATHรายการลงใน.profileไฟล์ในโฮมไดเร็กตอรี่ของผู้ใช้นั้น


นอกจากนี้คุณสามารถเพิ่มเส้นทางแบบเต็มสำหรับแต่ละคำสั่งของคุณภายในสคริปต์:

/bin/cp filename.so filename_org.so

หรือตั้งค่าPATHตัวแปรรวมถึงสิ่งที่จำเป็นทั้งหมดใน$PATHSตอนต้นของสคริปต์ของคุณ

PATH=$PATH:/bin:/usr/bin:xxx
export PATH

2
การวิเคราะห์ที่ถูกต้อง แต่คุณไม่ได้พูดถึงทางออกที่เหมาะสมซึ่งเป็นชุดในสถานที่ที่เหมาะสมแทนPATH .bashrcการเปลี่ยนสคริปต์เป็นสคริปต์ทุบตีจะไม่สร้างความแตกต่างใด ๆ : .bashrcถูกโหลดโดยเชลล์แบบโต้ตอบเท่านั้น
Gilles 'หยุดชั่วร้าย'

2

มีปัญหาเดียวกันในขณะที่ทำงานไบนารีซึ่งมีเส้นทางที่ตั้งอยู่ใน bashrc

แก้ไขปัญหาโดยทำสิ่งต่อไปนี้:

เพิ่มไบนารีหรือเพิ่มลิงก์ไปยังไบนารีใน / usr / bin

ln -s [path_to_binary] [name_of_executable] 

จากนั้นตรวจสอบการใช้

ls -l

คุณสามารถลบแบบฟอร์มรายการ bashrc


0

คุณสามารถทำสิ่งหนึ่งที่ง่ายถ้าคุณมีสคริปต์ขนาดเล็กและจบการทำงานของคุณโดยเร็ว

ไปที่บรรทัดคำสั่งใช้คำสั่งด้านล่าง

which your_command 

คำสั่งดังกล่าวจะพิมพ์ออกรวมถึงการใช้เส้นทางคำสั่งที่โดยตรง

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