Câu hỏi Làm cách nào để tạo bí danh Bash vĩnh viễn?


Tôi muốn tạo bí danh cho rm lệnh để có một thông báo xác nhận sau khi thực hiện lệnh này. Vì vậy, tôi đang tạo một bí danh như thế này alias rm='rm -i'. Nhưng theo như tôi biết đây là một bí danh tạm thời và nó tồn tại cho đến khi bạn đóng terminal.

Vì nó được giải thích đây để lưu bí danh vĩnh viễn, tôi cần thực thi ~/.bash_aliases hoặc là ~/.bashrc lệnh trong terminal và thêm bí danh của tôi vào đó. Nhưng khi tôi thực thi ~/.bashrc Tôi nhận được thông báo lỗi sau:

bash: /home/bakhtiyor/.bashrc: Permission denied

Khi tôi chạy ~/.bash_aliases Tôi nhận được một thông báo lỗi như thế này:

bash: /home/bakhtiyor/.bash_aliases: File or directory doesn't exist.

Vấn đề thực tế là gì và tôi có thể giải quyết nó như thế nào?


308
2017-12-15 07:54


gốc


Bạn đã tạo bí danh bằng cách nào? - karthick87
@ karthick87. Tôi đã cập nhật câu hỏi của mình. - Bakhtiyor
CÂU TRẢ LỜI - - stackoverflow.com/a/2622711/1487102 - neaumusic


Các câu trả lời:


Để tạo bí danh, hãy thêm vĩnh viễn bí danh vào .bashrc tập tin

gedit ~/.bashrc

Và sau đó thêm bí danh của bạn ở dưới cùng.

alt text

Bây giờ thực thi . ~/.bashrc trong thiết bị đầu cuối của bạn (cần có khoảng cách giữa . và ~/.bashrc.

Bây giờ bạn có thể kiểm tra bí danh của bạn.

alt text


342
2017-12-15 08:24



@ karthick87 bạn đã viết "Bây giờ thực thi. ~ / .bashrc trong thiết bị đầu cuối của bạn (cần có khoảng cách giữa. và ~ / .bashrc.". Tại sao bước này cần thiết? - Geek
cái đầu tiên '.' làm trong. ~ / .bashrc? - Zen
@Geek @Zen "Execute" không phải là thuật ngữ chính xác. Dấu chấm tương đương với source. Với . ~/.bashrc, bạn nguồn bash của bạn. Việc thực thi tệp sẽ bắt đầu một tiến trình con, thực hiện các lệnh trong quá trình này, sau đó quay trở lại. Tất cả những gì được thực hiện trong tiến trình con không ảnh hưởng đến tiến trình cha (bash mà từ đó bạn đã thực thi). Thay vào đó, tìm nguồn cung ứng (với dấu chấm) hoạt động chính xác như thể bạn đã viết nội dung của tệp trong thiết bị đầu cuối. Đây là cái bạn muốn. .bashrc có nguồn gốc mỗi khi bạn bắt đầu một bash. Nếu bạn thực hiện thay đổi, chúng sẽ không áp dụng cho đến khi bạn bắt đầu một bash hoặc nguồn mới theo cách thủ công. - Gauthier
@ButtleButkus - có thể chỉ muốn thay đổi tùy chọn của một người dùng hơn là toàn bộ hệ thống. Trong Ubuntu, tệp .bashrc toàn hệ thống là /etc/bash.bashrc - WillC
Điều này chỉ hoạt động một phần. Tôi cần phải thi hành . ~/.bashrc mỗi lần tôi mở terminal. Sử dụng OS X EI Captian (v10.11.6). - Shubham A.


Có rất nhiều cách để tạo bí danh. Cách sử dụng nhiều nhất là:

  1. Thêm bí danh trực tiếp vào ~/.bashrc tập tin

    Ví dụ: nối các dòng này vào ~/.bashrc tập tin

    alias ll='ls -l'
    alias rm='rm -i'
    

    Lần sau (sau khi bạn đăng xuất / đăng nhập hoặc hoàn thành . ~/.bashrc) khi bạn nhập rm các rm -i lệnh sẽ được thực hiện.

  2. Phương pháp thứ hai cho phép bạn tạo một tệp bí danh riêng biệt, vì vậy bạn sẽ không phải đặt chúng vào .bashrc, nhưng với một tệp bạn chọn. Đầu tiên, chỉnh sửa ~/.bashrc và thêm hoặc bỏ ghi chú các dòng sau, nếu nó chưa được

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

    Lưu và đóng tệp. Sau đó, tất cả những gì bạn phải làm là tạo ra ~/.bash_aliases và thêm bí danh của bạn vào đó, với cùng một định dạng được chỉ định trong phương thức đầu tiên.

    Nội dung của tôi ~/.bash_aliases tập tin:

    alias cs='cd;ls'
    

205
2017-12-15 08:21



+1 để sử dụng ~/.bash_aliases. - ændrük
Đúng, sử dụng một tệp khác cho bí danh sạch sẽ hơn nhiều, cũng di động giữa các bản phân phối. Tôi sử dụng tập tin đó bởi vì một số bí danh là không đủ và một chức năng là cần thiết. Vì vậy, nó sạch sẽ hơn nhiều nếu bạn sử dụng một tệp cho tác vụ đó thay thế. Tôi có một bí danh khác -> alias aliases="xdg-open ~/.bash_aliases && source ~/.bash_aliases", vì vậy bí danh đã trở thành lịch phát sóng khi lưu và nếu bạn mắc lỗi, nó sẽ quảng cáo bạn. - erm3nda
bằng cách nào đó sau khi tôi thêm bí danh như alias ls='ls -althr', một số cờ được đưa ra sẽ không có hiệu lực, trong trường hợp này cờ -t không có hiệu lực. bạn có biết tại sao? - Sajuuk
Theo mặc định ~/.bashrc chứa đựng cho ~/.bash_aliases, không cần chỉnh sửa nó. - Jaakko
Không phải luôn luôn ~ / .bashrc chứa các phần tử ~ / .bash_aliases như trong trường hợp của tôi với thiết bị đầu cuối Ubuntu Windows 10 giải pháp này rất tiện dụng. - Jose


Vấn đề là bạn đang cố gắng thực thi một tệp không thực thi được: Bạn có thể kiểm tra điều này với:

ls -la ~/.bashrc
-rw-r--r-- 1 username username 3596 2010-08-05 17:17 /home/pt001424/.bashrc

Lưu ý không có chữ "x - thực thi" trên cột đầu tiên (các quyền của tệp).

Tệp hồ sơ không phải là tệp thực thi, thay vì thực thi chúng, bạn tải chúng bằng:

source /home/bakhtiyor/.bashrc

hoặc là

. /home/bakhtiyor/.bashrc

17
2017-12-15 10:24





Nó âm thanh với tôi như vấn đề duy nhất của bạn chỉ đơn giản là cố gắng để thực hiện. Bashrc khi nó không phải là thực thi. Nhưng đây không phải là cách chính xác để làm điều đó; bất cứ khi nào bạn thay đổi tập tin này, bạn nên "thực thi" nó bằng lệnh:

source ~/.bashrc

Nếu không, nó sẽ đơn giản tạo ra một trình bao mới, thực thi tệp trong môi trường của vỏ mới, sau đó loại bỏ môi trường đó khi nó thoát ra, do đó mất đi sự thay đổi của bạn. Bằng cách tìm nguồn cung ứng kịch bản lệnh, nó thực thi trong trình bao hiện tại, vì vậy nó sẽ vẫn có hiệu lực.

Tôi giả định lỗi thứ hai là vì bash_aliases không tồn tại. Nó không phải là bắt buộc, chỉ được khuyến nghị để giữ cho các thay đổi của bạn được tách biệt và có tổ chức. Nó chỉ được sử dụng nếu nó tồn tại và bạn có thể xem thử nghiệm cho nó trong .bashrc:

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

Điều này nói rằng nếu tập tin ~ / .bash_aliases tồn tại, hãy chạy nó.


15
2018-01-16 20:29



~/.bash_aliases tốt hơn. askubuntu.com/questions/194111/… - tomByrer
sử dụng source lệnh đã làm cho bí danh của tôi hoạt động. +1 - dspacejs
Chỉ để hoàn thành: Dấu chấm đầu tiên trên dòng . ~/.bash_aliases có cùng ý nghĩa với lệnh được tích hợp sẵn trong trình bao source. Tôi thấy đây là câu trả lời đúng, giải thích những gì đang xảy ra. - Melebius


echo "alias vps='ssh -X user@example.com'" >> ~/.bashrc

Đây là một ví dụ mà tôi đang tìm kiếm, một cách để gõ một vài chữ cái ở đầu cuối ("vps") để đăng nhập từ xa vào máy chủ và kích hoạt tính năng chuyển tiếp X11 để tôi có thể chạy các ứng dụng gui như "gedit" qua mạng.

Bất kể lệnh command / aliased, cách này với câu lệnh echo, dấu ngoặc kép và biểu tượng để nối đầu ra của lệnh vào một tệp (>>) làm việc cho tôi. Chỉ cần thay thế lệnh của tôi cho lệnh bí danh mà bạn cần và nhập nó vào thiết bị đầu cuối của bạn.


8
2018-06-15 11:39



Các trích dẫn ở đây hơi phức tạp. Trong ví dụ này, việc sử dụng dấu ngoặc kép là không có ý nghĩa, nhưng nếu văn bản trong dấu ngoặc kép chứa dấu đô la, dấu gạch chéo ngược, v.v, bạn sẽ cần phải hiểu cách trình xử lý chúng bên trong dấu ngoặc kép. Bạn có thể chuyển sang dấu nháy đơn ở bên ngoài và dấu ngoặc kép ở bên trong, nhưng sau đó bạn vẫn cần phải hiểu cách Bash xử lý các dấu ngoặc kép trong định nghĩa bí danh. - tripleee


Tôi đã thực hiện chức năng nhỏ này để viết nhanh bí danh mới vào .bashrc

##------------------------------------ ##
 #           -- new-alias --           #
 # creates new alias & writes to file  #
 #          $1 = alias new             #
 #          $2 = alias definition      #
##------------------------------------ ##
new-alias () { 
  if [ -z "$1" ]; then
    echo "alias name:"
    read NAME
  else
    NAME=$1
  fi

  if [ -z "$2" ]; then
    echo "alias definition:"
    read DEFINTION
  else
    if [ "$2" = "-cd" ]; then
      DEFINTION='cd '
    else
      DEFINTION=$2
    fi
  fi

  echo "alias $NAME='$DEFINTION'" >> ~/.bashrc
  . ~/.bashrc
}

5
2017-12-17 20:37



Ý tưởng hay, nhưng bất cẩn khi sử dụng chức năng này có thể dẫn đến việc đánh rơi .bashrc với nhiều phiên bản alias chỉ huy. Chức năng của bạn chắc chắn cần phải thực hiện một số kiểm tra để tránh lộn xộn như vậy. - Troublemaker-DV


nếu bạn đang sử dụng ruby, bạn có thể cài đặt aka bằng rubygem.

gem install aka2

sử dụng

aka generate hello="echo helloworld" #add an alias
aka g hello="echo helloworld"  #add alias for lazy people

aka destroy hello #remove alias
aka d hello #remove alias for lazy people

rubygem sẽ tự động mã nguồn tệp dot của bạn để bạn không cần. Kiểm tra nó ra.


4
2018-01-21 14:14





Tôi sẽ đề nghị sử dụng /etc/bash.bashrc

Bạn có thể thêm dòng ở cuối tệp đó.

alias ok="ping google.com"

Sau khi đặt các bí danh trên mỗi dòng, bạn phải khởi động lại hoặc relogin.


0
2017-08-09 03:36



"Tôi sẽ đề nghị .." và tại sao bạn sẽ đề nghị điều đó? - muru
Bạn không nên rối tung với tệp hệ thống trừ khi bạn muốn cài đặt toàn bộ hệ thống cho tất cả người dùng. Trên một hệ thống cá nhân, sự khác biệt là biên, nhưng sau đó rối tung với các tệp hệ thống phức tạp hơn, nên bạn có thể vẫn thích các tệp dấu chấm cá nhân của riêng mình cho các tùy chọn cá nhân (và dễ dàng hơn để sao chép các thiết lập ở một nơi khác trong tương lai, quá). - tripleee
Khởi động lại? Đó thực sự là lời khuyên khủng khiếp, KHÔNG làm điều đó, đặc biệt là khi source /etc/bash.bashrc làm tất cả những gì bạn muốn trong ví dụ này. Nhưng nên sử dụng ~/.bashrc hoặc là ~/.bash_aliases thay thế - Xen2050
@ Xen2050, tôi đề nghị khởi động lại để hiển thị nó hoạt động sau khi khởi động lại / relogin. Bằng cách này, ngay cả một cửa sổ thiết bị đầu cuối sạch sẽ cũng sẽ làm việc. - Fahad Ahammed
Bạn có thể nâng cấp lên một hạt nhân mới mà không cần khởi động lại, đây không phải là cửa sổ cũ ;-) - Xen2050