การสร้างนามแฝงสำหรับสคริปต์ทุบตี


10

ดังนั้นผมจึงได้พยายามทดลองและสร้างในalias .bashrcอย่างไรก็ตามเมื่อฉันทดสอบคำสั่งที่ฉันได้รับ:

[rkahil@netmon3 ~]$ menu
-bash: menu: command not found

นี่คือสิ่งที่ฉันมีใน.bashrcไฟล์:

# Source global definitions

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
alias menu='./menuScript.sh'
alias vi='vim'

สิ่งที่ตลกคือเมื่อฉันสร้างนามแฝงviมันทำงานได้ แต่เมนูไม่ได้ ฉันค้นหาโพสต์ก่อนหน้านี้ใน UnixStackExchange และพยายามติดตามโพสต์อื่น ๆ แต่ไม่มีประโยชน์ ใครบ้างที่มีข้อเสนอแนะใด ๆ ?


1
คุณลองใช้ alias menu = 'bash ./menuScript.sh' แล้วหรือยัง (ผมไม่ได้อยู่ในเครื่องลินุกซ์ไม่สามารถทดสอบได้)
Con7e

คุณเรียกใช้ 'เมนู' มาจากไหน หากไม่ใช่ไดเรกทอรีเดียวกันกับ 'menuScript.sh' ก็จะบ่นเกี่ยวกับ 'ไม่พบคำสั่ง' บางทีคุณควรใช้เส้นทางสัมบูรณ์?
garethTheRed

1
@garethTheRed มันจะบอกว่า./menuScript.sh: command not found
Michael Mrozek

@MichaelMrozek - ยุติธรรม ฉันเพิ่งตรวจสอบและมันก็พูดNo such file or directoryซึ่งยังคงไม่เหมือนกับข้อผิดพลาดของ OP จุดยังคงยืน - มันจะดีที่สุดกับเส้นทางที่แน่นอนเว้นแต่นามแฝงมักจะถูกนำมาใช้เท่านั้นจากไดเรกทอรีที่มีmenuScript.shอยู่
garethTheRed

1
@ryekayo เสร็จแล้ว :)
Con7e

คำตอบ:


9

alias menu='bash ./menuScript.sh'คุณควรลองกับ ฉันไม่ได้อยู่ในเครื่อง Linux ดังนั้นจึงไม่สามารถทดสอบด้วยตนเองได้ แต่ควรใช้งานได้ เมื่อคุณเรียกนามแฝงว่าไม่รู้ว่าจะทำอย่างไรกับเส้นทางดังนั้นคุณต้องรวมbashจุดเริ่มต้น

และการรีเซ็ตเทอร์มินัลจะช่วยได้หลังจากทำการเปลี่ยนแปลง


ฉันไม่เข้าใจว่าย่อหน้าแรกมีความสำคัญอย่างไร - เว้นแต่ว่าจะmenuScript.shไม่ได้รับการดำเนินการchmodใด ๆ ในกรณีนี้ข้อความแสดงข้อผิดพลาดจะเป็น“ ปฏิเสธการอนุญาต” ฉันสงสัยว่าการบังคับอ่านซ้ำ.bashrcไฟล์เป็นคำตอบ …………………… PS เชลล์รู้ว่าต้องทำอย่างไรกับพา ธ แบบเดียวกับที่ผู้ใช้พิมพ์./menuScript.sh- โดยพยายามเรียกใช้ไฟล์
สกอตต์

7

เมื่อคุณทำ

alias menu='./menuScript.sh'

คุณสร้างนามแฝงที่ระบุว่า "ไฟล์นั้น" แต่ไม่ได้บอกว่าจะต้องทำอะไรกับมัน

อย่างไรก็ตามถ้าคุณทำ

alias menu='source ./menuScript.sh'

หรือ

alias menu='. ./menuScript.sh'

คุณกำลังเรียกใช้ไฟล์นั้น


6

คุณจำแหล่งที่มาของไฟล์ ~ / .bashrc ของคุณหลังจากทำการเปลี่ยนแปลงหรือไม่? เนื่องจากการเปลี่ยนแปลงจะมีผลในไฟล์. bashrc ของคุณหลังจากรีสตาร์ทคอมพิวเตอร์หรือเพียงแค่จัดหาไฟล์


2
โพสต์ประเภทนี้จะปรากฏขึ้นราวกับว่าเหมาะสำหรับความคิดเห็น
HalosGhost

2
@HalosGhost คุณคิดยังไง? มันเป็นสิ่งแรกที่ฉันคิดเช่นกันมันจะทำให้เกิดสิ่งนี้
Michael Mrozek

@MichaelMrozek ฉันแนะนำสิ่งนี้เพียงเพราะดูเหมือนว่าสำหรับฉันที่โพสต์คำตอบควรเสนอวิธีการแก้ปัญหาที่ชัดเจนเช่น "คุณลืมแหล่งที่มาของคุณ.bashrcทำต่อไปนี้ ... " ในทางกลับกันการถามคำถามที่ชัดเจน (เช่น "คุณลืมที่จะ ... ?") ดูเหมือนจะเหมาะสมกว่าสำหรับความคิดเห็น การใช้ถ้อยคำใหม่จะไม่ใช้เวลามากนักเพื่อให้โพสต์นี้เหมาะสมกับคำตอบมากขึ้น
HalosGhost

ในขณะที่รีสตาร์ทคอมพิวเตอร์ของคุณจะทำเคล็ดลับคุณจะต้องออกจากระบบ tty หรือเซสชันของคุณ (ถ้าใช้ตัวจัดการเข้าสู่ระบบ) หากคุณเข้าสู่ระบบกราฟิกและคุณไม่ต้องการsource ~/.bashrcหรือ. ~/.bashrcจากนั้นคุณสามารถเปิดเปลือกอื่นได้เช่นกัน มันง่ายอย่างนั้น ไม่ต้องบูตเครื่องใหม่
Dylan

0

เหตุผลที่มันทำงานด้วยvimเพราะเป็นโปรแกรมที่สามารถเรียกใช้ได้โดยไม่ต้องมีเส้นทางโดยตรง คุณไม่จำเป็นต้องพูดว่า "ฉันต้องการให้เรียกใช้งานโปรแกรมนี้" เนื่องจากเป็นโปรแกรมvimหนึ่ง มันเป็นรหัสยากในระบบปฏิบัติการที่เมื่อได้รับคำสั่งvimให้ไปและรันไฟล์/usr/bin/viหรือที่ใดก็ตามที่เป็นโปรแกรมจริง


เอ่อไม่มันไม่ได้เข้ารหัสยากในระบบปฏิบัติการ มีไฟล์ที่เรียกว่าvimมีอยู่ใน$PATHนั้นอาจจะเป็นไบนารีปฏิบัติการสคริปต์ปฏิบัติการหรือแม้กระทั่ง symlink ไปยังโปรแกรมอื่น .. หากคุณลบรายการสำหรับvimมันจะไม่สามารถใช้ได้กับผู้ใช้
roaima

@roaima สิ่งที่ฉันหมายถึงคือการเรียกใช้ vim นั้นแตกต่างจากการโทรหาโปรแกรมที่กำหนดเองเล็กน้อย ฉันเห็นสิ่งที่คุณได้รับและเห็นด้วย
Nathanael Morgan

ฉันมีสคริปต์ที่เรียกifviว่าอาศัยอยู่ในของฉัน$HOME/bin(ซึ่งเกิดขึ้นจะอยู่ในของฉัน$PATH) ฉันใช้มันในลักษณะเดียวกับที่ฉันอาจเรียกใช้ไบนารีที่ติดตั้งระบบ ไม่สำคัญว่าจะเป็นโปรแกรมที่กำหนดเอง
roaima

0

มีปัญหาสองประการกับนามแฝง

alias menu='./menuScript.sh'
  1. มันทำให้คุณต้องอยู่ในไดเรกทอรีเฉพาะเมื่อคุณเรียกใช้นามแฝง หากคุณอยู่ในไดเรกทอรีที่menuScript.shไม่มีอยู่นามแฝงจะไม่สามารถทำงานได้

    มันจะดีกว่าถ้าคุณระบุพา ธ สัมบูรณ์แบบเต็มไปยังmenuScript.shสคริปต์เมื่อกำหนดนามแฝงเช่น

    alias menu="$HOME/local/bin/menuScript.sh"

    หรือคล้ายกัน

  2. ดังที่คนอื่น ๆ พูดไปแล้วอีกเหตุผลหนึ่งที่ทำให้นามแฝงอาจล้มเหลวก็คือสคริปต์ไม่สามารถเรียกใช้งานได้หรือมี#!บรรทัดที่ไม่ถูกต้อง ตรวจสอบให้แน่ใจว่าสคริปต์นั้นทำงานได้ด้วย

    chmod +x menuScript.sh

    และบรรทัดแรกในสคริปต์คือ

    #!/bin/bash

    หรือเส้นทางใด ๆ ที่จะbash(หรืออะไรก็ตามที่เชลล์เขียนสคริปต์ไว้) ในระบบของคุณ

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