2010-04-10 27 views
34

Làm thế nào tôi có thể tìm ra nơi một bí danh được xác định trên hệ thống của tôi? Tôi đang đề cập đến loại bí danh được sử dụng trong phiên Terminal được khởi chạy từ Mac OS X (10.6.3).Cách tìm ra nơi bí danh (theo nghĩa bash) được định nghĩa khi chạy Thiết bị đầu cuối trong Mac OS X

Ví dụ, nếu tôi nhập lệnh alias không có tham số tại dấu nhắc lệnh Terminal, tôi nhận được một danh sách các bí danh mà tôi đã thiết lập, ví dụ:

alias mysql='/usr/local/mysql/bin/mysql' 

Tuy nhiên, tôi đã tìm kiếm khắp nơi hệ thống của tôi sử dụng Spotlight và mdfind trong các tệp khởi động khác nhau và cho đến nay không thể tìm thấy nơi bí danh này đã được xác định. (Tôi đã làm nó một thời gian dài trước đây và không viết xuống nơi tôi đã gán bí danh).

+0

Câu hỏi này là (hiện tại) ngoài chủ đề cho StackOverflow và câu trả lời đã được trả lời [trên Unix & Linux.SE] (https://unix.stackexchange.com/questions/38330/how-can-i-find-a- rogue-alias-declaration). –

+0

Tôi đang bỏ phiếu để đóng câu hỏi này là không có chủ đề vì nó thuộc về U & L (https://unix.stackexchange.com/questions/38330/how-can-i-find-a-rogue-alias-declaration) hoặc SuperUser. –

Trả lời

1

Tôi tìm thấy câu trả lời (Tôi đã nhìn chằm chằm vào tệp chính xác nhưng đã bỏ lỡ hiển nhiên).

Bí danh trong trường hợp của tôi được xác định trong tệp ~/.bash_profile

Bằng cách nào đó điều này đã làm tôi khó hiểu.

+0

cảm ơn bạn, đã thử .bashrc và .bash_aliases, quên nó là .bash_profile – neaumusic

22

bạn chỉ cần nhập alias vào dấu nhắc lệnh để xem bạn có bí danh nào. Nếu không, bạn có thể làm một find trên các nơi phổ biến nhất mà các bí danh được xác định, ví dụ như

grep -RHi "alias" /etc /root 
0

Tôi nghĩ rằng có lẽ đây cũng tương tự như những gì ghostdog74 nghĩa tuy nhiên lệnh của họ đã không làm việc cho tôi.

tôi sẽ cố gắng một cái gì đó như thế này:

for i in `find . -type f`; do # find all files in/under current dir 
echo "========" 
echo $i       # print file name 
cat $i | grep "alias"   # find if it has alias and if it does print the line containing it 
done 

Nếu bạn muốn trở thành thực sự ưa thích thậm chí bạn có thể thêm một if [[ grep -c "alias" ]] then <print file name>

+3

Bạn đã được trao giải thưởng "[Sử dụng mèo vô dụng] (http://partmaps.org/era/unix/award.html)". Thay vì 'cat $ i | grep "alias" 'bạn nên đặt nó làm đối số cuối cùng của' grep'. Ví dụ. 'grep" alias "$ i'. – johankj

+2

Thay vì vòng lặp, backtick, find, echo và cat, một 'grep -R alias' đơn giản sẽ làm những gì bạn gợi ý. Điểm mấu chốt của câu hỏi là * ở đâu để nhìn *. – dimo414

12

Cũng trong tương lai đó là những file bash cấu hình tiêu chuẩn

  • /etc/hồ sơ
  • ~/.bash_profile hoặc ~/.bash_login hoặc ~/.profile
  • ~/bash_logout
  • ~/.bashrc

Thông tin thêm: http://www.heimhardt.com/htdocs/bashrcs.html

+2

'/ etc/bashrc' cũng được xem xét. –

+1

Trên một số máy '/ etc/bashrc' có thể được đặt tên là'/etc/bash.bashrc'. Nó cũng nằm trên máy Debian 7 của tôi. –

+1

Ngoài ra, một số distro đặt các thiết lập hệ thống trong '/ etc/bash /'. –

1

Đối với các thiết lập phức tạp hơn (ví dụ khi bạn đang sử dụng một khung kịch bản lệnh shell như bash-it, oh-my-zsh hoặc thích), việc thêm 'alias mysql' vào các vị trí chính trong tập lệnh của bạn thường hữu ích. Điều này sẽ giúp bạn tìm ra chính xác khi nào bí danh được thêm vào.

ví dụ:

echo "before sourcing .bash-it:" 
alias mysql 
. $HOME/.bash-it/bash-it.sh 
echo "after sourcing bash:" 
alias mysql 
6

Một chút muộn để đảng, nhưng tôi đã có cùng một vấn đề (cố gắng tìm nơi "l." Lệnh được aliased trong RHEL6), và kết thúc ở một nơi không được đề cập trong các câu trả lời trước. Nó có thể không được tìm thấy trong tất cả các triển khai bash, nhưng nếu thư mục /etc/profile.d/ tồn tại, hãy thử tìm kiếm các bí danh không giải thích được.Đó là nơi tôi đã tìm thấy:

[[email protected] ~]$ grep l\\. /etc/profile.d/* 
/etc/profile.d/colorls.csh:alias l. 'ls -d .*' 
/etc/profile.d/colorls.csh:alias l. 'ls -d .* --color=auto' 
/etc/profile.d/colorls.sh: alias l.='ls -d .*' 2>/dev/null 
/etc/profile.d/colorls.sh:alias l.='ls -d .* --color=auto' 2>/dev/null 

Thư mục không được đề cập trong trang bash và không phải là nơi tìm kiếm hồ sơ/thông tin khởi động, nhưng trong trường hợp RHEL bạn có thể thấy cuộc gọi mã trong/etc/hồ sơ:

for i in /etc/profile.d/*.sh ; do 
    if [ -r "$i" ]; then 
    if [ "${-#*i}" != "$-" ]; then 
     . "$i" 
    else 
     . "$i" >/dev/null 2>&1 
    fi 
    fi 
done 
26

Đối với OSX, chuỗi 2 bước này hoạt động tốt cho tôi, trong việc định vị bí danh tôi đã tạo từ lâu và không thể xác định vị trí mong muốn (~/.zshrc).

cweekly:~ $ which la 
la: aliased to ls -lAh 

cweekly:~$ grep -r ' ls -lAh' ~ 
/Users/cweekly//.oh-my-zsh/lib/aliases.zsh:alias la='ls -lAh' 

Aha! "Ẩn" trong ~/.oh-my-zsh/lib/aliases.zsh. Tôi đã poked xung quanh một chút trong .oh-my-zsh nhưng đã bỏ qua lib/aliases.zsh.

HTH

+0

Cảm ơn bạn vì điều này! –

+0

Đây là lực lượng vũ phu nhưng hiệu quả và không yêu cầu bất kỳ phỏng đoán nào. Có vẻ như là cách dễ nhất để đi. – jcollum

-6

Trong trường hợp của tôi, tôi sử dụng Oh My Zsh, vì vậy tôi đặt bí danh nghĩa trong ~/zshrc tập tin.

+0

Được đăng với chi tiết hơn hai năm rưỡi trước. –

+0

Câu hỏi đặt ra là anh ta không thể nhớ những bí danh được xác định trong Mac OSX mà tôi đã chạy vào, vì vậy tôi chỉ cung cấp cho vị trí tập tin (~/.zshrc) mà làm việc cho tôi (tôi sử dụng Oh My Zsh). Tôi thực sự không biết ý bạn là gì về chi tiết hơn. – ryan

+2

Ý tôi là, [câu trả lời hiện có từ tháng 11 năm 2014] (https://stackoverflow.com/questions/2614403/how-to-find-out-where-alias-in-the-bash-sense-is-defined-when -running-terminal/43245187 # 26742455) đã nói mọi thứ trong câu trả lời này và thêm nhiều hơn nữa. –