Điểm:1

Làm cách nào tôi có thể chạy ứng dụng từ bất kỳ đâu trong thiết bị đầu cuối mà không cần ở trong đường dẫn đầy đủ

lá cờ vu

Tôi có một ứng dụng mà tôi có thể chạy khi đang ở vị trí tệp như bên dưới:

-$ cd nhà/myApps/ứng dụng
-$ ./run.sh

Tôi muốn gọi run.sh từ bất kỳ đâu trong thiết bị đầu cuối của mình mà không ở trong đường dẫn đầy đủ, tôi đã thử sử dụng alais và thêm mã bên dưới vào tệp bashrc.

bí danh mylovleyapp=/home/myApps/app/run.sh

vấn đề là bất cứ khi nào tôi muốn chạy ứng dụng bằng mylovleyapp, chương trình sẽ trả về lỗi vì run.sh phụ thuộc vào một tệp khác trong thư mục myApps

Làm thế nào tôi có thể đạt được điều đó?

cocomac avatar
lá cờ cn
Tập lệnh chắc chắn có một dòng là `./something`. Nhưng điều đó liên quan đến _your_ thư mục hiện tại, không phải thư mục hiện tại của tập lệnh. Khi bạn chạy nó từ vị trí của tập lệnh, cả hai đều giống nhau, vì vậy điều đó không thành vấn đề. Nhưng khi bạn chạy nó từ một nơi khác, nó sẽ gây ra vấn đề.Hãy xem [câu hỏi Stack Overflow này](https://stackoverflow.com/q/59895/16886597) để biết cách lấy thư mục hiện tại của tập lệnh từ bên trong tập lệnh. Cập nhật tập lệnh của bạn với điều đó và bạn sẽ ổn.
Will avatar
lá cờ id
@cocomac có thể đặt câu trả lời này làm câu trả lời không? Tôi nghĩ rằng nó có thể giải quyết vấn đề tốt hơn câu trả lời của tôi.
cocomac avatar
lá cờ cn
@Will Tôi sẽ đưa ra câu trả lời sau vài phút nữa
cocomac avatar
lá cờ cn
@Will tôi đã làm cho nó một câu trả lời thích hợp
Điểm:2
lá cờ cn

Vì OP không cung cấp tập lệnh mẫu nên tôi sẽ tạo một tập lệnh. Nó sẽ làm một việc. Chạy ls trong thư mục của tập lệnh.

Vâng, tôi biết bạn chỉ có thể làm ls không có ./. Nhưng đối với ví dụ này, tôi giả vờ rằng nó là bắt buộc, để minh họa một tập lệnh sử dụng thư mục hiện tại của tập lệnh.

#!/usr/bin/env bash
ls ./

Lưu tập lệnh đó ở đâu đó. tôi sẽ lưu nó dưới dạng /home/ubuntu/test/myscript. Làm cho nó có thể thực thi được với chmod +x /home/ubuntu/test/myscript. Hiện nay đĩa CD đến thư mục chứa tập lệnh (ví dụ: cd /home/ubuntu/test) và chạy tập lệnh với ./myscript:

ubuntu@computer:~/test$ ./myscript
myscript someRandomFile

Càng xa càng tốt. Nhưng bây giờ hãy chạy nó từ một thư mục khác. Trong ví dụ này, tôi sẽ chạy nó từ thư mục gốc (/).

ubuntu@máy tính:~/test$ cd /
ubuntu@computer:/$ /home/ubuntu/test/myscript
bin dev home lib lib64 bị mất + tìm thấy mnt proc chạy snap sys usr
khởi động, v.v. init lib32 libx32 media opt root sbin srv tmp var

Ối. Chúng tôi muốn nó in các tệp ở vị trí của tập lệnh chứ không phải vị trí của người dùng. Trước khi tìm ra giải pháp, hãy nghĩ về tại sao nó làm điều này trong một thời điểm. Đáp án đơn giản. ./ là tương đối so với của người dùng thư mục hiện tại, không phải là thư mục của tập lệnh.

Để lấy thư mục của tập lệnh từ bên trong tập lệnh, chúng ta sẽ xem xét câu hỏi Stack Overflow này.

Ý chính của nó rất đơn giản: script_dir="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" sẽ lấy thư mục hiện tại của tập lệnh và lưu trữ nó trong biến script_dir.

Hãy cập nhật kịch bản cho phù hợp. Kịch bản của chúng tôi bây giờ là thế này:

#!/usr/bin/env bash
script_dir="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
ls "$script_dir"

Hãy chạy nó và xem nó có hoạt động không:

ubuntu@computer:/$ /home/ubuntu/test/myscript
myscript someRandomFile

Nó hoạt động! Nó in các tệp trong thư mục của tập lệnh, ngay cả khi bạn không ở cùng thư mục với tập lệnh, Chúng ta đã hoàn tất. Ý tưởng tổng thể là đơn giản. Trong kịch bản, ./ đề cập đến thư mục của người dùng. "$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" đề cập đến thư mục chứa tập lệnh. Hãy cập nhật tập lệnh của bạn cho phù hợp và tập lệnh sẽ hoạt động.

Điểm:1
lá cờ cn

Bạn cần thêm đường dẫn ứng dụng của mình vào biến PATH. Để làm điều đó tạm thời, hãy chuyển đến thư mục chứa ứng dụng của bạn và sau đó:

ĐƯỜNG=.:$ĐƯỜNG

Giờ đây, bạn có thể gọi ứng dụng của mình từ bất kỳ đâu mà không cần phải nhập đường dẫn đầy đủ của ứng dụng đó. Nếu bạn đóng thiết bị đầu cuối, cài đặt này sẽ bị mất.

Để đặt nó vĩnh viễn, bạn cần chỉnh sửa tệp .bashrc của mình và thêm :/home/myApps/app vào cuối PATH của bạn. Lưu tệp .bashrc mới và sau đó:

nguồn .bashrc
Điểm:1
lá cờ cn

Có nhiều cách đến Rome.

bí danh

Nếu bạn thích một bí danh, bạn có thể như sau:

alias mylovleyapp='(cd home/myApps/app && ./run.sh)'

niềng răng (...) khiến hai lệnh chạy trong một lớp con. Do đó, thư mục hiện tại của bạn sẽ không thay đổi sau khi chương trình kết thúc.

Tập lệnh bao bọc trong PATH của bạn

Thay vào đó, bạn có thể tạo tập lệnh bao bọc và đặt tập lệnh đó vào thư mục trong tìm kiếm của mình CON ĐƯỜNG, ví dụ. ~/.local/bin hoặc ~/thùng nếu bạn là người dùng duy nhất cần truy cập, hoặc /usr/local/bin nếu tất cả người dùng cần truy cập. Sau đó, tất cả những gì bạn cần làm là nhập tên của tập lệnh để khởi chạy chương trình.

Kịch bản có thể chỉ là những gì bạn thường làm để bắt đầu chương trình:

#!/usr/bin/env bash
cd home/myApps/ứng dụng
./run.sh

Lưu tập lệnh đó chẳng hạn như ~/.local/bin/mylovleyapp. Làm cho tập lệnh có thể thực thi được để nó có thể chạy được:

chmod +x ~/.local/bin/mylovleyapp

Nếu ~/.local/bin không tồn tại và bạn phải tạo nó, sau đó đăng xuất rồi đăng nhập lại để nó tự động được đưa vào danh sách của bạn CON ĐƯỜNG. Từ bây giờ, chỉ cần gõ mylovleyapp trong thiết bị đầu cuối sẽ chạy ứng dụng của bạn.

MindC3ll avatar
lá cờ vu
Cảm ơn rất nhiều vanadi cho câu trả lời của bạn! .. nó hoạt động như một cơ duyên .. Tôi đã tạo một tập lệnh bao bọc cho đường dẫn của mình và điều đó thật hoàn hảo.
Điểm:0
lá cờ id

Vì vậy, bạn cần thay đổi thư mục làm việc của mình thành thư mục chứa ứng dụng đích, sau đó thực thi ứng dụng để ứng dụng có thể tìm thấy các tệp phụ thuộc.

Tôi nghĩ bạn có thể làm điều này bằng cách đưa ra hai lệnh riêng biệt trong bí danh: một lệnh để thay đổi thư mục và lệnh kia để thực thi chương trình, được phân tách bằng dấu chấm phẩy.

Vậy bạn .bashrc bổ sung nên đọc:

alias mylovleyapp='cd /home/myApps/app; ./run.sh'

Điều đó giả định rằng các tệp phụ thuộc nằm trong /home/myApps/ứng dụng ... nếu không thì bạn có thể thay đổi thư mục làm việc thành thư mục chứa các tệp phụ thuộc, sau đó chạy ứng dụng bằng đường dẫn tuyệt đối làm thành phần thứ hai.

MindC3ll avatar
lá cờ vu
không có cách nào để làm cho thư mục phổ biến?
cocomac avatar
lá cờ cn
@ MindC3ll Có đấy. Xem [nhận xét của tôi](https://askubuntu.com/questions/1368492/how-i-can-run-application-from-anywhere-in-the-terminal-without- being-in-the-ful/1368496# bình luận2351406_1368492). Nó phức tạp hơn câu trả lời của Will, nhưng điều đó có nghĩa là bạn có thể chạy tập lệnh mà không cần `cd`-ing vào thư mục

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.