วิธีการรันสคริปต์โดยไม่ต้องพิมพ์เส้นทางแบบเต็ม?


57

ฉันต้องการทราบว่ามีวิธีการเรียกใช้โปรแกรม / เชลล์สคริปต์โดยไม่ต้องพิมพ์เส้นทางแบบเต็ม:

/opt/idea/bin/idea.sh

คุณสามารถกำหนดพา ธ แบบเต็มของไฟล์ได้ตลอดเวลา
muru

ขอบคุณ @muru สิ่งนี้ฉันรู้ แต่มันเป็นโปรแกรมที่ฉันใช้บ่อยดังนั้นฉันจึงอยากจะเรียกใช้ด้วยคำสั่งง่ายๆไม่ใช่เส้นทางของไฟล์ที่ยาว
จอนนี่

nufailm.blogspot.com/2012/05/…สิ่งนี้จะช่วยให้คุณได้ความคิด :)
dedunumax

คำตอบ:


60

คุณก็สามารถสร้างsymlink /usr/local/binสร้างใน สิ่งที่คุณต้องใช้คือเรียกใช้คำสั่ง:

sudo ln -s /full/path/to/your/file /usr/local/bin/name_of_new_command

หลังจากนั้นคุณควรทำให้fileไฟล์ปฏิบัติการของคุณ:

chmod +x /full/path/to/your/file

ตอนนี้คุณควรจะสามารถทำงานname_of_new_commandได้ตลอดเวลาในสถานีของคุณ

โปรดทราบว่านี่เป็นทางออกที่ดีสำหรับการใช้งานที่บ้านของ Linux เท่านั้น


11
โปรดทราบว่าคุณไม่ควรวาง symlink ไว้ใน/usr/local/binจุดนั้นให้ชี้ไปที่สคริปต์ในโฟลเดอร์บ้านส่วนตัวเช่นเนื่องจาก/home/jack/myscript.shผู้ใช้เท่านั้นที่jackจะสามารถเรียกใช้งานได้ ผู้ใช้รายอื่นจะมองเห็น symlink แต่จะไม่ใช่ไฟล์ที่ชี้ไป ในระบบผู้ใช้คนเดียวสิ่งนี้อาจไม่สำคัญ แต่ก็เป็น "แนวปฏิบัติที่ดี" ในการวางสคริปต์ (หรือลิงก์ไปยังสคริปต์) ที่ผู้ใช้ทุกคนสามารถอ่าน/usr/local/binและสคริปต์ส่วนตัวที่สร้างขึ้นเอง (หรือลิงก์ไปยังสคริปต์) ของ ผู้ใช้คนเดียวใน~/binโฟลเดอร์ของพวกเขา
Malte Skoruppa

เพิ่ม symlink ใน / usr / sbin / ทำให้สามารถเข้าถึงได้จากทุกที่
Seyfi

28

คุณสามารถเพิ่มตัวแปร/opt/idea/binของคุณPATH:

PATH=/opt/idea/bin:"$PATH"

idea.shหลังจากนี้คุณสามารถเรียกใช้มันมีเพียงแค่

คุณอาจต้องการเพิ่มบรรทัดนี้ใน~/.bashrcไฟล์ของคุณ


2
เช่นกัน: หากคุณทำให้สคริปต์เรียกทำงานส่วนขยาย. sh สามารถถูกทิ้งได้ (สมมติว่าคุณใช้ shebang ที่ด้านบนสุดของสคริปต์) เพียงแค่ "ความคิด" ก็เพียงพอแล้ว
Jacob Vlijm

1
@Jacob: คุณไม่สามารถออกจากส่วนขยายได้เนื่องจากเป็นส่วนหนึ่งของชื่อไฟล์ที่ใช้งานได้ (นี่ไม่ใช่ Windows ที่วิเศษเช่นนั้นทำให้เกิดปัญหาอื่น ๆ ) ในการเรียกใช้สคริปต์ด้วยชื่อideaคุณจะต้องสร้างลิงค์หรือชื่อแทนโดยใช้ชื่อนั้นชี้ไปที่idea.shสคริปต์
Jonathan Callen

2
@JonathanCallen Callen คุณสามารถทำได้อย่างแน่นอน! ทำให้สคริปต์สามารถดำเนินการได้ลบส่วนขยาย. sh จากทั้งชื่อไฟล์และคำสั่งเพื่อเรียกใช้โดยระบุว่าคุณเริ่มสคริปต์ด้วย shebang #! / bin / bash
Jacob Vlijm

1
@Jacob สิ่งที่ฉันหมายถึงคือไม่ต้องเปลี่ยนชื่อไฟล์คุณไม่สามารถ (และปรากฏว่านี่เป็นส่วนหนึ่งของแพคเกจซอฟต์แวร์ที่ใหญ่กว่าดังนั้นคุณไม่ควรเปลี่ยนชื่อไฟล์)
Jonathan Callen

2
ขอบคุณ @Jacob สังเกตก็กล่าวว่า"เมื่อมีการติดตั้งลงในไดเรกทอรีในเส้นทางของระบบสคริปต์" idea.shสคริปต์ไม่ได้สคริปต์ดังกล่าวในความเป็นจริงการเคลื่อนย้ายมันนอก dir การติดตั้งได้รับการสนับสนุนอย่างสมบูรณ์ กฎการบรรจุภัณฑ์ Debian ไม่ได้ใช้ที่นี่
Janos

15

คุณสามารถสร้างฟังก์ชั่นใน~/.bashrc:

some-name () {
    /path/to/your/file
    # or:
    #cd /path/to/your
    #./path
}

หรือคุณสามารถสร้างalias:

alias some-name='/path/to/your/file'
# or  
#alias some-name='cd /path/to/your/; ./file'

ในทั้งสองกรณีคุณสามารถเรียกใช้ได้โดยโทร:

$ some-name

หากไฟล์ไม่ได้ขึ้นอยู่กับว่ามันทำงานอยู่ที่ใดให้ลองเพิ่มมันเข้าไปที่~/bin:

mkdir -p ~/bin
cp /path/to/you/file ~/bin
# or mv /path/to/you/file ~/bin
# or ln -s /path/to/you/file ~/bin

~/binหากมีอยู่จะถูกเพิ่มไปยังของคุณ$PATHโดยอัตโนมัติ จากนั้นคุณโทรโดยตรงfile:

$ file

(แม้ว่าตัวเลือกชื่อที่ไม่ถูกต้องให้ลองเรียกมันว่าบางสิ่งที่ไม่ธรรมดา


@Oli ให้เวลาห้านาทีฉันมักจะเพิ่มการเยื้อง :) มันน่ารำคาญเพราะฉันต้องหลอกผู้แก้ไขให้ใช้ Ctrl-K เพื่อเยื้องระดับที่สอง
muru

2
+1 โดยเฉพาะสำหรับวิธีแก้ปัญหาในการเพิ่มfileของคุณ~/binซึ่งเป็นสิ่งที่ฉันมักจะทำ (สำหรับสคริปต์ที่ยาวกว่า) ฉันอาจแม้แต่จะใส่ที่หนึ่งที่ด้านบน :) alias l='ls -CF'นามแฝงที่ดีสำหรับทางลัดไปยังคำสั่งที่มีค่าบางอย่างเช่น แม้ว่าฉันจะได้เห็นการใช้นามแฝงที่ยอดเยี่ยมกว่ามาก ฉันมักจะไม่ประกาศฟังก์ชั่นใน~/.bashrc(ฉันชอบที่จะมีการจัดสคริปต์ทั้งหมดของฉันในไฟล์แยกต่างหาก~/bin) แม้ว่าทั้งหมดนี้เป็นเรื่องของรสนิยมฉันเดา :)
Malte Skoruppa

@MalteSkoruppa ฉันเพิ่งตั้งค่าวิธีที่ง่ายที่สุดในการปล่อยกู้cdเพราะสคริปต์อาจขึ้นอยู่กับไดเรกทอรีการทำงาน :) มิฉะนั้นใช่ฉันมักจะใส่ไฟล์ไว้ใน~/binตัวเอง
muru

10

คุณสามารถสร้างตัวเรียกใช้งานโดยใช้คำสั่งต่อไปนี้:

gnome-desktop-item-edit --create-new <path-where-to-save>. ฉันจะเปิดหน้าต่างนี้

ป้อนคำอธิบายรูปภาพที่นี่

ตั้งชื่อมันตามที่คุณชอบและในช่องคำสั่งพิมพ์ต่อไปนี้

sh -c '/opt/idea/bin/idea.sh' และบันทึก

ตอนนี้คุณสามารถเรียกใช้ไฟล์นั้นโดยใช้ตัวเรียกใช้งานที่สร้างขึ้นใหม่

หรือ

คุณสามารถสร้างไฟล์ .desktop โดยมีเนื้อหาดังต่อไปนี้

[Desktop Entry]
Name=<whatever-you-want>
Exec=sh -c '/opt/idea/bin/idea.sh'     
Terminal=false
Type=Application
Icon='<path to an icon file if you want>'

ตอนนี้บันทึกด้วย.desktopส่วนขยายในสถานที่ใด ๆ

ทำให้สามารถเรียกใช้งานได้ด้วยคำสั่งนี้ chmod a+x <your-desktop-file>

ตอนนี้ดับเบิลคลิกเพื่อเปิด


7

เราสามารถกำหนดฟังก์ชั่นและเพิ่มปุ่มลัดโดยใช้bindคำสั่งเพื่อเรียกสิ่งนั้น เปิด~/.bashrcไฟล์และเพิ่มบรรทัดเหล่านี้ลงไป:

# define function that opens your program in working directory
Openprog(){
    /your-Program/path/here
}

# bind hotkey to it (<F12>)
bind -x '"\e[24~":"Openprog"'

ตอนนี้เมื่อคุณกดF12โปรแกรมของคุณจะเริ่มทำงาน

หมายเหตุ: วิธีที่รวดเร็วในการกำหนดรหัสยกเว้น:

เปิด terminal ของคุณและกด+Ctrl Vตอนนี้กดแป้นพิมพ์ลัดที่คุณชื่นชอบ รหัสหลบหนีที่ถูกต้องควรปรากฏขึ้น เพียงให้แน่ใจว่าจะเข้ามาแทนที่^[ด้วย\eก่อนที่จะเพิ่มทางลัดไปยังเช่นแทนที่ด้วย^[[24~\e[24~


7

นอกจากนี้เรายังสามารถเรียกใช้/opt/idea/bin/idea.shไฟล์ได้โดยตรงโดยใช้bash_aliases

เปิด~/.bashrcไฟล์โดยเรียกใช้

gedit ~/.bashrc

ลบ#ก่อนหน้าบรรทัดและบันทึกเพื่อให้บรรทัดมีลักษณะเช่น

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

ตอนนี้เปิด~/.bash_aliasesไฟล์

gedit ~/.bash_aliases

เพิ่มบรรทัดด้านล่างในไฟล์นั้นและบันทึก

alias idea='cd /opt/idea/bin && sudo ./idea.sh'

ในที่สุดก็แหล่ง~/.bashrcไฟล์

source ~/.bashrc

ตอนนี้คุณสามารถเรียกใช้/opt/idea/bin/idea.shไฟล์ได้โดยตรงโดย

idea

4

นอกเหนือจากคำตอบที่ดีอื่น ๆ แล้วให้พิจารณาเชื่อมโยง~/.local/binและเพิ่มไดเรกทอรีนี้ลงใน PATH ของคุณ (จากภายใน.bashrcตัวอย่างของคุณ) วิธีนี้ไม่จำเป็นต้องมีการอนุญาตพิเศษ (ซึ่งแตกต่างจากการเชื่อมโยงไปถึง/usr/local/binเป็นต้น) ด้วยวิธีนี้คุณอาจมีโครงสร้างไดเรกทอรีมาตรฐานโดยไม่ทำให้ $ HOME หมดไป อ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ที่https://unix.stackexchange.com/คำถามเหล่านี้:


1

สร้างลิงค์นุ่ม ๆ ของมันใน/usr/bindirecotyr:

ln -s /usr/bin/idea.sh  /opt/idea/bin/idea.sh

ตอนนี้เรียกใช้โดยใช้:

idea.sh

0

หรือคุณสามารถใช้

nano ~/.bashrc

และเพิ่ม

PATH=/full/path/to/file:"$PATH"

ในตอนท้ายของมันจากนั้นบันทึกและออก หลังจากนั้นคุณสามารถพิมพ์ชื่อไฟล์ได้


0

ฉันทำตามคำตอบทั้งหมดที่นี่และที่อื่น ๆ และมีไม่กี่คนที่พูดถึงคุณอาจต้องออกจากระบบเพื่อให้คำสั่งทำงานได้ในที่สุด

เพื่อสรุปโดยเฉพาะอย่างยิ่งสำหรับXubuntuแต่สำหรับรุ่นอื่น ๆ ของDebian / Ubuntuและฉันได้เขียนคำแนะนำง่ายๆเหล่านี้

(ในคำแนะนำต่อไปนี้เราใช้ directory ~ / binเพราะเป็นสถานที่โดยอัตโนมัติจากที่ระบบปฏิบัติการเหล่านี้ค้นหาคำสั่งดูที่นี่ :

คำแนะนำที่เข้าใจผิดเพื่อให้คำสั่งของคุณทำงาน:

# Open Terminal with Ctrl + Alt + T (or your system's own shortcut)

# You'll work in your home folder, no need to use sudo for any of this

cd # Go to home directory

mkdir -p bin # Create folder ~/bin if it doesn't exist

# Be careful not to type /bin, that's the bin folder in system root: /

sudo apt install nano # Skip this if you have Nano installed

nano bin/yournewcommand

    # In Nano, type:

    printf "Your new command works! \n" # \n means line break

    # Ctrl+X To leave Nano

    # Ctrl+Y To save the unsaved file

    # Enter to confirm

chmod +x bin/yournewcommand

yournewcommand # If you just created the bin folder, this command might not yet work.

# You must now log out and log back in to make the bin folder noticed (I think)

yournewcommand # Now it works! (You can use Tab to autocomplete the command you're typing)

# If you add a second file/command, it should work without logging out (at least in my tests)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.