tại sao tên bí danh được xác định trong tệp .bashrc không hoạt động?


12

Tôi đã đặt tên bí danh trong tệp .bashrc như bên dưới. Nhưng tên bí danh không hoạt động. tại sao?

alias c='clear'
alias l='ls -lt'
alias h='history'
alias d='ls -lt |grep "^d"'

export ORACLE_HOME=/ora11gr2/app/oracle/product/11.2.0/db2
export ORACLE_LIB=/ora11gr2/app/oracle/product/11.2.0/db2/lib
export PATH=$ORACLE_HOME/bin:/usr/vac/bin:/usr/vacpp/bin:.    
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:.

2
Bạn đang nói rằng bạn nhận được các biến môi trường nhưng không phải là bí danh, hoặc bạn không nhận được biến nào?
Paul

1
Có thể là một vấn đề riêng biệt, nhưng bạn xóa sạch PATH của bạn. Bạn nên tham khảo PATH cũ của mình trong mọi tình huống, ví dụexport PATH=$PATH:$ORACLE_HOME/bin:/usr/vac/bin:/usr/vacpp/bin:. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
Giàu Homolka

Câu trả lời:


29

Bạn đã nguồn .bashrctập tin của bạn sau khi bạn thay đổi nó? Thử:

. ~/.bashrc

Sau đó, vỏ của bạn sẽ thấy những thay đổi. Ngoài ra, bạn có thể chấm dứt và khởi động lại vỏ của bạn.

ps

Khi bạn chạy từ một tập lệnh, tải ref này đầu tiên

shopt -s expand_aliases

2
Điều này đã giải quyết vấn đề của tôi! Trước đó, tôi thậm chí đã cố gắng đăng xuất và đăng nhập lại thông qua SSH, nhưng không có gì xảy ra. Bí danh vẫn chưa có. Có vẻ như tôi phải làm điều này mỗi lần tôi làm SSH! Bạn có biết tại sao điều này xảy ra?
Vladimir Despotovic

Tôi không khuyên bạn nên chạy lại .bashrc. Nó có thể gây ra một số giá trị trùng lặp và sưng. Tại sao không thoát ra và bắt đầu một vỏ mới? Nó sẽ tải .bashrctập tin cập nhật .
AlikElzin-kilaka

2

Điều này có thể xảy ra bởi vì PATH của bạn chưa được đặt chính xác để sử dụng tất cả các đường dẫn nhị phân được tham chiếu bí danh. Tức là ls tồn tại dưới / bin / ls.

Bạn có thể thử sử dụng "export PATH = $ PATH: $ ORACLE_HOME / bin: / usr / vac / bin: / usr / vacpp / bin :." hoặc một cái gì đó như "export PATH = $ ORACLE_HOME / bin: / usr / vac / bin: / usr / vacpp / bin: / bin: / sbin /: / usr / sbin

nếu không, sau đó sử dụng "which" để tìm thư mục đường dẫn cho các nhị phân ref bí danh riêng lẻ (lịch sử nào).


1

Câu hỏi để tự hỏi mình là:

  • Là ~ / .bashrc đã được thực thi trong trình bao của bạn. Nó chỉ chạy khi vỏ được khởi động. Nếu bạn mở một shell mới (thực thi bash) thì nó sẽ như vậy. Với aliasbạn sẽ thấy tất cả các bí danh của bạn được in.
  • Điều thứ hai cần hỏi: là các chương trình trong bí danh của bạn có sẵn. Ít nhất h (lịch sử bí danh) chắc chắn nên hoạt động, bởi vì nó được tích hợp sẵn.

1

Có lẽ bạn đang cố gắng xác định bí danh của mình trong .bashrcđó đã là toàn cầu.

Thông thường bí danh của bạn .bashrcđược xác định trước /etc/bashrccuộc gọi. Hãy cố gắng xác định chúng sau .

Dưới đây là một ví dụ về .bashrc:

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
alias c='clear'
alias l='ls -lt'
alias h='history'
alias d='ls -lt |grep "^d"'

export ORACLE_HOME=/ora11gr2/app/oracle/product/11.2.0/db2
export ORACLE_LIB=/ora11gr2/app/oracle/product/11.2.0/db2/lib
export PATH=$ORACLE_HOME/bin:/usr/vac/bin:/usr/vacpp/bin:.    
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:.

Câu trả lời tuyệt vời! Tôi đang thấy điều này một cách nhất quán trong AWS Linux AMI
rainabba 27/2/2016

1

Chỉ trong trường hợp bất kỳ người dùng MacOS nào tìm kiếm câu trả lời này, tôi đã thử nó trên MacBook của mình và thậm chí khởi động lại Terminal sẽ không tải các định nghĩa bí danh mới. Cách duy nhất tôi có thể làm cho nó hoạt động là source ~/.bashrcmọi lúc. Sau đó tôi đã thử chuyển các định nghĩa bí danh của mình sang ~/.bash_profileđây là những gì đã làm.

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.