Tạo bí danh cho tập lệnh bash


10

Vì vậy, tôi đã cố gắng thử nghiệm và tạo ra một aliastrong .bashrc. Tuy nhiên, khi tôi kiểm tra lệnh tôi nhận được:

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

Đây là những gì tôi có trong .bashrctập tin:

# Source global definitions

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

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

Điều buồn cười là khi tôi tạo bí danh vi, nó đã hoạt động. Nhưng thực đơn thì không. Tôi đã tra cứu các bài viết trước trên UnixStackExchange và cố gắng theo dõi các bài viết khác, nhưng không có kết quả. Có ai khác có bất kỳ đề nghị?


1
bạn đã thử với menu bí danh = 'bash ./menuScript.sh' chưa? (Tôi không ở trong máy linux, không thể kiểm tra được)
Con7e

Bạn đang chạy 'menu' từ đâu? Nếu nó không cùng thư mục với 'menuScript.sh' thì nó sẽ phàn nàn về 'lệnh không tìm thấy'. Có lẽ bạn nên sử dụng một con đường tuyệt đối?
garethTheRed

1
@garethTheRed Nó sẽ nói./menuScript.sh: command not found
Michael Mrozek

@MichaelMrozek - công bằng. Tôi vừa mới kiểm tra và cho biết No such file or directory, lỗi này vẫn không giống với lỗi của OP. Điểm vẫn đứng mặc dù - nó sẽ là tốt nhất với một đường dẫn tuyệt đối trừ khi bí danh luôn luôn chỉ được sử dụng từ thư mục nơi menuScript.shcư trú.
garethTheRed

1
@ryekayo xong :)
Con7e

Câu trả lời:


9

Bạn nên thử với alias menu='bash ./menuScript.sh'. Tôi hiện không sử dụng máy Linux, vì vậy không thể tự kiểm tra, nhưng nó sẽ hoạt động. Khi bạn gọi bí danh, nó không biết phải làm gì với đường dẫn, vì vậy bạn phải bao gồm bashphần đầu.

Và đặt lại thiết bị đầu cuối sẽ giúp sau khi thực hiện thay đổi.


Tôi không hiểu đoạn đầu tiên quan trọng như thế nào - trừ khi menuScript.shchưa được chmodthực thi, trong trường hợp đó, thông báo lỗi sẽ là Giấy phép bị từ chối. Tôi nghi ngờ rằng việc buộc đọc lại .bashrctệp là câu trả lời. Phần cứng của bạn và phần cứng của phần mềm này biết cách thực hiện với đường dẫn giống như cách người dùng nhập ./menuScript.sh- bằng cách thử thực thi tệp.
Scott

7

Khi bạn làm

alias menu='./menuScript.sh'

bạn tạo bí danh cho biết "tập tin đó" nhưng không nói phải làm gì với nó.

Tuy nhiên, nếu bạn làm

alias menu='source ./menuScript.sh'

hoặc là

alias menu='. ./menuScript.sh'

Bạn đang nói chạy tập tin đó.


6

Bạn có nhớ nguồn ~ / .bashrc của mình sau khi thực hiện các thay đổi không? Bởi vì các thay đổi có hiệu lực trong tệp .bashrc của bạn sau khi khởi động lại máy tính của bạn hoặc đơn giản là tìm nguồn cung cấp tệp.


2
Loại bài đăng này xuất hiện như thể nó sẽ phù hợp hơn cho một bình luận.
HalosGhost

2
@HalosGhost Bạn thấy thế nào? Đó cũng là điều đầu tiên tôi nghĩ đến, nó sẽ gây ra chính xác điều này
Michael Mrozek

@MichaelMrozek, tôi đề nghị này chỉ vì có vẻ như với tôi rằng bài gửi câu trả lời nên cung cấp một giải pháp dứt khoát, ví dụ như, "Bạn quên nguồn của bạn .bashrc, hãy làm như sau ...". Mặt khác, việc làm rõ các câu hỏi (ví dụ: "Bạn có quên không?") Có vẻ phù hợp hơn cho các bình luận. Sẽ không mất nhiều thời gian để làm cho bài đăng này có vẻ phù hợp hơn với một câu trả lời.
HalosGhost

Trong khi khởi động lại máy tính của bạn sẽ thực hiện thủ thuật, bạn chỉ cần đăng xuất khỏi tty hoặc phiên của bạn (nếu sử dụng trình quản lý đăng nhập). Nếu bạn đã đăng nhập vào một môi trường đồ họa, và bạn không muốn source ~/.bashrchoặc . ~/.bashrc, sau đó bạn chỉ có thể mở vỏ khác cũng có. Nó đơn giản như vậy. Không cần khởi động lại.
Dylan

0

Lý do tại sao nó làm việc với vimlà vì đó là một chương trình đã có thể gọi được mà không có đường dẫn trực tiếp. Bạn không cần phải nói rõ ràng "Tôi muốn điều này được thực thi như một chương trình" bởi vì vimđã là một. Nó được mã hóa cứng vào HĐH mà khi nhận được lệnh vim, hãy đi và thực thi tệp /usr/bin/vihoặc bất cứ nơi nào có chương trình thực tế.


À, không, nó không được mã hóa cứng trong HĐH. Có một tệp được gọi là vimcó sẵn trong $PATHđó có thể là tệp thực thi nhị phân, tập lệnh thực thi hoặc thậm chí là một liên kết tượng trưng đến chương trình khác .. Nếu bạn xóa mục nhập vimthì nó không còn khả dụng cho người dùng.
roaima

@roaima Ý tôi là việc gọi vim hơi khác so với gọi một chương trình tùy chỉnh. Tuy nhiên, tôi thấy những gì bạn đang nhận được và đồng ý
Nathanael Morgan

Tôi có một kịch bản gọi là ifvicuộc sống trong tôi $HOME/bin(mà tình cờ là của tôi $PATH). Tôi chỉ sử dụng nó theo cách chính xác giống như cách tôi có thể chạy nhị phân được cài đặt hệ thống. Nó thực sự không quan trọng rằng đó là một chương trình tùy chỉnh.
roaima

0

Có hai vấn đề với bí danh

alias menu='./menuScript.sh'
  1. Nó yêu cầu bạn phải ở trong một thư mục cụ thể khi bạn gọi bí danh. Nếu bạn đang ở trong một thư mục menuScript.shkhông tồn tại, bí danh sẽ không thực thi.

    Sẽ tốt hơn nếu bạn chỉ định đường dẫn tuyệt đối đầy đủ cho menuScript.shtập lệnh khi xác định bí danh, ví dụ:

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

    hoặc tương tự.

  2. Như những người khác đã nói, một lý do khác khiến bí danh có thể thất bại là tập lệnh không được thực thi hoặc có #!dòng không hợp lệ . Đảm bảo rằng tập lệnh có thể thực thi được với

    chmod +x menuScript.sh

    và dòng đầu tiên trong kịch bản là

    #!/bin/bash

    hoặc bất cứ đường dẫn nào tới bash(hoặc bất kỳ shell nào mà script được viết cho) trên hệ thống của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.