Chạy một kịch bản từ bất cứ đâu


8

Tôi có một kịch bản:

#!/bin/bash
echo "$(dirname $(readlink -e $1))/$(basename $1)"

ngồi ở đây: /home/myuser/bin/abspath.shcó quyền thực thi.

Nếu tôi chạy, echo $PATHtôi nhận được như sau:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/myuser/bin

Tôi muốn có thể, từ bất kỳ thư mục, gọi abspath <some_path_here>và nó gọi kịch bản của tôi. Tôi đang sử dụng bash, tôi đang làm gì sai?

Câu trả lời:


30

Bạn muốn gõ abspath, nhưng chương trình được đặt tên abspath.sh. Vấn đề không liên quan đến việc nó có trong PATH hay không, nhưng thực tế là bạn chỉ đơn giản là không sử dụng tên của nó để gọi nó.

Bạn có hai lựa chọn:

  1. abspath.shthay thế.
  2. Đổi tên chương trình thành abspath.

1
... Hoặc tạo một simlink : cd $HOME/bin ; ln -s abspath.sh abspath. Điều này cho phép bạn giữ phần mở rộng chính xác cho tập lệnh và có một công cụ có tên như bạn muốn. (Trong một số tương lai, bạn có thể thay thế tập lệnh shell của mình bằng tập lệnh python, cho mẫu ...)
F. Hauri

Hoặc tạo một bí danh.
Jenny D

6

Mã này đủ nhỏ để tôi có thể mã nó thành hàm shell:

abspath() {
    echo "$(dirname "$(readlink -e "$1")")/$(basename "$1")" 
} 

Và có bạn muốn tất cả những trích dẫn.


4

đặt bí danh bằng cách thêm lệnh của bạn vào tệp .bashrc.

alias abspath='sh /home/myuser/bin/abspath.sh'

Và đừng quên nguồn tập tin.


1
Tại sao bạn muốn sudo ở đây?
CVn

1
Tôi sẽ bỏ phiếu nếu tôi có đủ danh tiếng vì sử dụng sudo một cách không cần thiết chỉ là sai. Có vẻ như một số người tự động sử dụng sudo cho mọi thứ thay vì học khi nào và tại sao nó cần thiết.
Scott Severance

Đồng ý với các bạn. Và tôi biết khi nào nên sử dụng sudo. Tôi đã không nhìn thấy toàn bộ câu hỏi.
Balasekhar Nelli

2

Tôi sẽ đổi tên tập lệnh bash của bạn để abspathsau đó di chuyển nó vào binthư mục. Bạn sẽ sẵn sàng gọi abspathtừ bất cứ đâu sau đó


0

Tùy chọn thứ 3 là tạo một bí danh gọi là abspath trỏ đến tập lệnh abspath.sh của bạn.


5
Không cần thiết nếu được sửa như giải pháp được chấp nhận giải thích, cũng khá phức tạp và nó thực sự che giấu một vấn đề hơn là giải quyết nó.
dawud

Không đáng để tranh luận, nhưng không cần phải nói rằng nếu bạn giải quyết nó bằng một giải pháp, bạn không cần phải áp dụng một giải pháp khác. Có, đây là một giải pháp trả tiền và tham khảo trực tiếp kịch bản shell là một sửa chữa lý tưởng hơn.
tokamak
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.