Làm thế nào để chạy script mà không cần gõ đường dẫn đầy đủ?


57

Tôi muốn biết liệu có cách nào để chạy tập lệnh chương trình / shell mà không cần nhập đường dẫn đầy đủ không:

/opt/idea/bin/idea.sh

Bạn luôn có thể đưa ra đường dẫn đầy đủ của tệp.
muru

Cảm ơn bạn @muru, điều này tôi biết, nhưng đây là chương trình tôi thường sử dụng, vì vậy tôi muốn có thể chạy nó bằng một lệnh đơn giản, không phải là một đường dẫn tệp dài.
Jonny

nufailm.blogspot.com/2012/05/ trên này sẽ giúp cho ý tưởng :)
depunumax

Câu trả lời:


60

Bạn chỉ có thể tạo symlink . Tạo nó trong /usr/local/bin. Tất cả bạn cần là để chạy lệnh:

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

Sau đó, bạn nên thực hiện file:

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

Bây giờ bạn sẽ có thể chạy name_of_new_commandbất cứ lúc nào trong thiết bị đầu cuối của bạn.

Lưu ý rằng đây là giải pháp tốt chỉ dành cho sử dụng Linux tại nhà.


11
Lưu ý rằng bạn không nên đặt một liên kết tượng trưng trong /usr/local/binđó trỏ đến tập lệnh trong thư mục nhà riêng, chẳng hạn như /home/jack/myscript.sh, chỉ người dùng jackthường mới có thể thực thi nó. Liên kết tượng trưng sẽ hiển thị cho những người dùng khác, nhưng không hiển thị tệp mà nó trỏ đến. Trên một hệ thống người dùng đơn lẻ, điều này có thể không quan trọng, nhưng vẫn là "thực hành tốt" để đặt các tập lệnh (hoặc liên kết đến tập lệnh) mà tất cả người dùng có thể đọc /usr/local/binvà các tập lệnh riêng, tự tạo (hoặc liên kết đến tập lệnh) của một người dùng trong ~/binthư mục của họ .
Malte Skoruppa

thêm một liên kết tượng trưng trong / usr / sbin / làm cho nó có thể truy cập từ bất cứ đâu
Seyfi

28

Bạn có thể thêm /opt/idea/binvào PATHbiến của mình :

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

Sau này, bạn có thể chạy nó với đơn giản idea.sh.

Bạn có thể muốn thêm dòng này trong ~/.bashrctập tin của bạn .


2
Ngoài ra: nếu bạn tạo tập lệnh thực thi, phần mở rộng .sh có thể bị bỏ đi (giả sử bạn sử dụng shebang ở đầu tập lệnh). chỉ đơn giản là "ý tưởng" là đủ rồi.
Jacob Vlijm

1
@Jacob: bạn không thể rời khỏi tiện ích mở rộng, vì đó là một phần của tên tệp thực thi (đây không phải là Windows, nơi ma thuật như thế gây ra các vấn đề khác). Để gọi tập lệnh có tên idea, bạn sẽ phải tạo một liên kết hoặc bí danh với tên đó chỉ vào idea.shtập lệnh.
Jonathan Callen

2
@JonathanCallen Gọi bạn chắc chắn có thể! làm cho tập lệnh có thể thực thi được, loại bỏ phần mở rộng .sh khỏi cả tên tệp và lệnh để chạy nó, với thực tế là bạn bắt đầu tập lệnh với shebang #! / bin / bash.
Jacob Vlijm

1
@Jacob điều tôi muốn nói là không đổi tên tệp , bạn không thể (và có vẻ như đây là một phần của gói phần mềm lớn hơn, vì vậy bạn không nên đổi tên tệp)
Jonathan Callen

2
Cảm ơn @Jacob, hãy chú ý rằng "Khi tập lệnh được cài đặt vào một thư mục trong hệ thống PATH" . Các idea.shkịch bản không phải là kịch bản như vậy, trên thực tế di chuyển nó ra ngoài dir cài đặt của nó là hoàn toàn không được hỗ trợ. Các quy tắc đóng gói Debian không áp dụng ở đây.
janos

15

Bạn có thể tạo một chức năng trong ~/.bashrc:

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

Hoặc bạn có thể tạo một alias:

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

Trong cả hai trường hợp, bạn có thể chạy nó bằng cách gọi:

$ some-name

Nếu tệp không phụ thuộc vào nơi nó đang chạy, hãy xem xét thêm nó vào ~/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, nếu nó tồn tại, được thêm vào $PATHtự động của bạn . Sau đó, bạn gọi trực tiếp file:

$ file

(Mặc dù lựa chọn tên không tốt, hãy xem xét việc gọi nó là một cái gì đó ít chung chung hơn.)


@Oli luôn cho tôi năm phút, tôi có xu hướng thêm thụt lề. :) Thật khó chịu khi tôi cần phải lừa trình soạn thảo sử dụng Ctrl-K cho các lần thụt cấp hai.
muru

2
+1 đặc biệt cho giải pháp thêm filevào của bạn ~/bin, đó là điều tôi thường làm (đối với các tập lệnh dài hơn). Tôi thậm chí có thể đặt cái đó lên hàng đầu :) Bí danh rất tốt cho các phím tắt cho các lệnh với các tham số nhất định, ví dụ : alias l='ls -CF'. Mặc dù tôi đã thấy nhiều công dụng tuyệt vời hơn của bí danh . Tôi không có xu hướng khai báo các hàm trong ~/.bashrc(Tôi thích có tất cả các tập lệnh của mình được sắp xếp trong các tệp riêng biệt ~/bin). Mặc dù tất cả điều này chỉ là vấn đề của hương vị, tôi đoán vậy :)
Malte Skoruppa

@MalteSkoruppa Tôi chỉ ưu tiên cho các phương thức dễ dàng nhất cho vay cd, bởi vì tập lệnh có thể phụ thuộc vào thư mục làm việc. :) Nếu không, vâng, tôi có xu hướng đặt các tập tin vào ~/binbản thân mình.
muru

10

Bạn có thể tạo launcher bằng cách sử dụng lệnh sau:

gnome-desktop-item-edit --create-new <path-where-to-save>. Tôi sẽ mở cửa sổ này.

nhập mô tả hình ảnh ở đây

Đặt tên cho nó bất cứ điều gì bạn thích và trong hộp lệnh gõ sau

sh -c '/opt/idea/bin/idea.sh' và lưu nó

Bây giờ bạn có thể chạy tệp đó bằng trình khởi chạy mới được tạo

HOẶC LÀ

Bạn có thể tạo tệp .desktop với nội dung sau

[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>'

Bây giờ lưu nó với .desktopphần mở rộng trên bất kỳ nơi nào.

Làm cho nó thực thi được bằng lệnh này chmod a+x <your-desktop-file>

Bây giờ bấm đúp chuột để mở nó.


7

Chúng ta có thể định nghĩa một hàm và thêm một phím nóng bằng cách sử dụng bindlệnh để gọi hàm đó. Mở ~/.bashrctệp và thêm các dòng này vào nó:

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

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

Bây giờ khi bạn nhấn F12, chương trình của bạn sẽ khởi chạy.

Lưu ý: Cách nhanh chóng để xác định mã thoát:

Mở thiết bị đầu cuối của bạn và nhấn Ctrl+ V. Bây giờ nhấn phím tắt yêu thích của bạn. Mã thoát chính xác sẽ xuất hiện. Chỉ cần đảm bảo thay thế ^[bằng \etrước khi thêm phím tắt vào, ví dụ thay thế ^[[24~bằng \e[24~.


7

Chúng tôi cũng có thể chạy /opt/idea/bin/idea.shtệp trực tiếp bằng cách sử dụngbash_aliases

Mở ~/.bashrctệp bằng cách chạy,

gedit ~/.bashrc

Xóa các dòng #trước và lưu nó, để các dòng sẽ như thế nào,

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

Bây giờ mở ~/.bash_aliasestập tin,

gedit ~/.bash_aliases

Thêm các dòng dưới đây trong tập tin đó và lưu nó,

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

Cuối cùng là nguồn ~/.bashrctập tin,

source ~/.bashrc

Bây giờ bạn có thể chạy /opt/idea/bin/idea.shtệp trực tiếp bằng cách,

idea

5

Ngoài các câu trả lời hay khác, hãy xem xét liên kết tượng trưng ~/.local/binvà thêm thư mục này vào PATH của bạn ( .bashrcví dụ từ bên trong bạn ). Phương pháp này không yêu cầu quyền đặc biệt ( /usr/local/binví dụ, không giống như symlinking ). Bằng cách này, bạn có thể có một cấu trúc thư mục tiêu chuẩn mà không làm ngập $ HOME của bạn. Đọc thêm về điều này trên các câu hỏi https://unix.stackexchange.com/ này :


1

Tạo một liên kết mềm của nó trong /usr/bindirecotyr:

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

Bây giờ chạy nó bằng cách sử dụng:

idea.sh

0

Hoặc đơn giản là bạn có thể sử dụng

nano ~/.bashrc

và thêm

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

vào cuối của nó, sau đó lưu và thoát. Sau đó, bạn có thể chỉ cần gõ tên tệp.


0

Tôi đã làm theo tất cả các câu trả lời ở đây và những nơi khác và rất ít người không đề cập đến việc bạn có thể cần phải ĐĂNG NHẬP để lệnh cuối cùng hoạt động.

Chỉ để tóm tắt, đặc biệt là cho Xubfox , nhưng đối với các biến thể Debian / Ubuntu khác, tôi cũng đã viết các hướng dẫn đơn giản này.

(trong các hướng dẫn sau đây, chúng tôi sử dụng thư mục ~ / bin , vì đó tự động là nơi mà các HĐH này tìm kiếm các lệnh. Xem tại đây :

Hướng dẫn bằng chứng để làm cho lệnh của bạn hoạt động:

# 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)
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.