วิธีการรันสคริปต์ในไดเรกทอรีที่แตกต่างกันอย่างไร


51

ฉันลองสิ่งนี้

./home/user/scripts/someScript

แต่มันไม่ทำงาน

ไม่พบไฟล์หรือโฟลเดอร์

ความคิดใด ๆ


2
เห็นได้ชัดว่าไม่มีไฟล์หรือไดเรกทอรีดังกล่าว ดังนั้นคุณให้เส้นทางที่ผิด จุดนั้นไม่ได้แปลว่า "ดำเนินการ" มันเป็นเพียงส่วนหนึ่งของเส้นทาง ในเปลือกปกติคุณพิมพ์ไฟล์อย่างใดอย่างหนึ่งที่จะดำเนินการหรือคำสั่ง (ซึ่งในความเป็นจริงนอกจากนี้ยังมีไฟล์) :)
Pithikos

กำจัดช่วงเวลาเริ่มต้นนั้นและลองอีกครั้ง อีกวิธีหนึ่ง ~ / สคริปต์ / someScript ก็จะทำงานเช่นกัน ยังจำ `` qoutes ในใจและโปรแกรม exec ($ man exec)
j0h

คำตอบ:


61

จุดนำในคำสั่งของคุณหมายถึง "สัมพันธ์กับไดเรกทอรีปัจจุบัน" ลบออกและมันจะอ้างถึง "ไฟล์someScriptในไดเรกทอรี/home/user/scripts:

/home/user/scripts/someScript

หากคุณได้รับ "สิทธิ์การใช้งานถูกปฏิเสธ" อาจเป็นเพราะคุณไม่มีสิทธิ์เพียงพอในการเข้าถึงไฟล์ในไดเรกทอรีของผู้ใช้รายอื่นหรือเนื่องจากไฟล์นั้นไม่สามารถเรียกใช้งานได้ เพื่อให้สามารถเรียกใช้งานได้ให้เรียกใช้:

chmod +x /home/user/scripts/someScript

35

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

ฉันเพิ่ม a cd $(dirname $0)ไว้ที่ส่วนหัวของสคริปต์เสมอดังนั้นโฟลเดอร์ที่มีสคริปต์จะเป็นโฟลเดอร์รูท


6

ลบ .

หากคุณทำให้chmod 755 <nameofscript>สคริปต์เรียกทำงานด้วยเพื่อรันคุณต้องพิมพ์พา ธ ไปยังสคริปต์เท่านั้น

เมื่อคุณเห็น./scriptการใช้งานมันจะบอกเชลล์ว่าสคริปต์นั้นอยู่ในไดเรกทอรีเดียวกันกับที่คุณกำลังเรียกใช้งาน sh /home/user/scripts/someScriptที่จะใช้เส้นทางแบบเต็มคุณพิมพ์


sh /path/to/file/path/to/fileจะแตกต่างจาก shวิ่ง/bin/shซึ่งเป็น symlinked /bin/dashไป
Lekensteyn

ทำอะไรที่ชัดเจนในตัวอย่างที่คุณเห็นในเน็ตโดยปกติแล้วคุณจะเห็นsh ./somescriptว่าสามารถพิมพ์อะไรได้บ้างเช่น `sh / path / to / script / scriptitself '
Bruno Pereira
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.