Làm mới bí danh và hàm sau khi xác định bí danh và hàm mới?


55

Khi tôi xác định một bí danh mới trong .bash_aliasestệp hoặc một chức năng mới trong .bashrctệp, có một số lệnh làm mới để có thể sử dụng ngay các bí danh hoặc chức năng mới mà không cần đóng thiết bị đầu cuối (trong trường hợp của tôi là xfce4-terminal với một vài tab mở, nhiều tệp được mở và ở giữa công việc)?


6
Lưu ý rằng không có lệnh nào sẽ làm cho lệnh mới đó được biết đến trong tất cả các thiết bị đầu cuối / tab đang mở của bạn. Bạn sẽ phải làm . .bashrchoặc source .bashrctrong mọi vỏ bạn mở.
Paul Tomblin

Câu trả lời:


66

Tìm nguồn tệp đã thay đổi sẽ cung cấp quyền truy cập vào bí danh hoặc hàm mới được viết trong thiết bị đầu cuối hiện tại, ví dụ:

source ~/.bashrc

Một cú pháp thay thế:

. ~/.bashrc

Lưu ý rằng nếu bạn có nhiều phiên bản bash đang chạy trong thiết bị đầu cuối của bạn (bạn đã đề cập đến nhiều tab), bạn sẽ phải chạy nó trong mọi trường hợp.


3
sourcecó nguồn gốc từ csh. Cách vỏ bourne là . .bashrc.
Paul Tomblin

Thật thú vị khi điều này không hoạt động khi tôi xác định alias prg='prg.py'. Tôi phải đóng thiết bị đầu cuối.
xralf

"bạn sẽ phải chạy cái này trong mọi trường hợp." - Lưu ý rằng người dùng zsh có thể đặt TMOUT và TRAPALRM một cách thích hợp thành stat và (nếu cần) nguồn lại ~ / .zshrc một lần mỗi giây hoặc ở bất kỳ khoảng thời gian hợp lý nào khác. Tôi không tin bash có thể làm điều này, mặc dù.
Kevin

6

Nhập . ~/.bashrcvào dòng lệnh sẽ chạy .bashrcvà do đó, bất kỳ chức năng nào được xác định trong tệp đó sẽ được tạo.

.bashrcchính nó cũng sẽ gọi và chạy .bash_aliases( nếu nó tồn tại) nếu .bashrccó mã này trong đó:

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

trong khi sử dụng . ~/.bash_aliasesmột mình (ví dụ tại dòng lệnh) sẽ chỉ thử và chạy .bash_aliasesmà không liên quan đến .bashrc và sẽ báo lỗi nếu tệp không tồn tại (do đó kiểm tra tệp khi kiểm tra .bashrc).


2

Đôi khi bạn sẽ muốn biến bí danh thành một hàm, nhưng khi bạn lấy nguồn bashrc, một lỗi lạ có thể xảy ra:

. ~/.bashrc
bash: /home/username/.bashrc: line 38: syntax error near unexpected token `('
bash: /home/username/.bashrc: line 38: `hello_world() {'

Điều này có thể xảy ra vì tên bí danh đang xung đột với tên của hàm mới được xác định. Theo như tôi biết, để tránh điều này cần phải unalias mọi thứ, sau đó nguồn tệp bashrc:

bash-4.3 $
unalias -a && . $HOME/.bashrc
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.