Tại sao các lệnh * NIX lại có các giá trị mặc định (phản trực giác) như vậy. [đóng cửa]


4

Tại sao hầu hết các lệnh * NIX của tôi (kinh nghiệm chủ yếu là Linux và hiếm gặp với FreeBDS) lại có các hành vi "điên rồ" (không trực quan) như vậy, tức là RẤT khác với hành động GUI "tương đương" sẽ làm.

Ví dụ rõ ràng nhất là lệnh sao chép tệp, cp, theo mặc định trên Linux, (1) không sao chép các thư mục theo cách đệ quy (rõ ràng là phản trực giác đối với bất kỳ ai đến với trình bao trước đó bằng GUI khi sao chép / dán sao chép một thư mục và mọi thứ trong đó) và (2) theo các liên kết sim (!! ) thay vì chỉ sao chép chúng theo cách chúng (một lần nữa, như bất kỳ người dùng GUI nào cũng mong đợi). Vì vậy, phiên bản "lành mạnh" của cp mà tôi tưởng tượng nên được mặc định là một cái gì đó như: cp -r.

(Và một lần nữa, đây không phải là phối cảnh "thiên vị" duy nhất cho người chỉ sử dụng GUI trước đó. Lệnh DOS copy ví dụ như những gì bạn mong đợi, như tương đương với cp -r hoặc là cp -ra...)

Một ví dụ rõ ràng khác là rm khi nào rm -ri là điều mà bất kỳ người không có vỏ nào cũng mong muốn là mặc định.

Và nó tiếp tục với 90% của tất cả các lệnh * NIX, nơi nhận được những gì bạn mong muốn theo trực giác là mặc định là điều bạn đạt được bằng cách thêm một vài tùy chọn. Và không phải như những gì người dùng nâng cao mong muốn là mặc định không phải là những gì người dùng mới làm, cho những việc như cprm Rõ ràng là 99% thời gian cp -rrm -r là những gì bạn cần. Và không phải là nếu mọi thứ chỉ cần duy trì theo cách này để tương thích ngược, vì bạn chỉ cần tạo một vỏ mới và giữ #/usr/bin/oldshell hoặc một cái gì đó cho cái cũ.

Vì vậy, một lần nữa, câu hỏi sẽ là tại sao các tùy chọn / chuyển đổi lệnh shell NIX mặc định lại quá xa so với những gì bạn trực giác mong đợi? Tôi có thể tìm thấy các lập luận lịch sử về việc mọi thứ diễn ra như thế nào (ngay cả cho mục đích giai thoại) và lý do nào khác sau đó là khả năng tương thích ngược đáng ghét đối với tình trạng hiện tại?


Tìm điều này trên unix.stackexchange thực sự trả lời RẤT NHIỀU câu hỏi của tôi ...


Chào mừng bạn đến với Superuser, vui lòng đọc những gì Câu hỏi thường gặp nói về "câu hỏi mở trò chuyện"
RedGrittyBrick

Với cp, tôi nghi ngờ lệnh có liên kết trước. Có một cơ hội tốt mà hầu hết những người sẽ biết tại sao mọi việc được thực hiện theo một cách nhất định là rất cũ hoặc đã chết. Một đoạn tốt của các lệnh thậm chí có thể trước ngày unix
Journeyman Geek

2
@NeuronQ: Nhưng, có thể môi trường đồ họa đang làm sai; p
Journeyman Geek

1
@NeuronQ: Nhưng để sao chép một cuốn sách trong thế giới thực, bạn phải sao chép từng trang, không chỉ đặt nó trên máy photocopy :)
choroba

1
@NeuronQ: không liên quan gì đến "thông minh". Bạn đang giả định rằng GUI bằng cách nào đó "theo cách của mọi thứ" và rằng các nguyên tắc thiết kế đằng sau chúng sẽ thống trị thế giới. Đó không phải là trường hợp. Không có lý do tại sao các công cụ CLI nên được mô hình hóa với các nguyên tắc thiết kế giống như các công cụ GUI (hoặc ngược lại). Các trường hợp sử dụng khác nhau và đối tượng mục tiêu khác nhau.
Mat

Câu trả lời:


3

Các lệnh làm chính xác như mong đợi của họ. Bạn có thể tìm ra những gì hợp lý để mong đợi một lệnh bằng cách xem trang thủ công cho lệnh đó.

VÍ DỤ.

người đàn ông cp: -i, - tương tác                   nhắc trước khi ghi đè (ghi đè tùy chọn -n trước đó)

Nếu bạn thấy mình nghĩ rằng một số tùy chọn là tốt để có tất cả thời gian, có nhiều cách khác nhau để kiên trì lựa chọn của bạn. Bạn có thể ví dụ gõ vào:

alias rm="rm -i"
alias cp="cp -r"

Nhưng điều đó sẽ chỉ kéo dài cho đến khi bạn đăng xuất. Để biến các tùy chọn đó thành vĩnh viễn, bạn có thể đặt các bí danh này vào một tệp được đọc bởi vỏ yor mỗi khi bạn đăng nhập. Nếu bạn chạy bash, bạn có thể đặt các lệnh khởi động của mình vào ~ / .bashrc. Nói chung, ~ / .profile cũng là một nơi tốt để đặt bí danh.


Tình trạng hiện tại của mọi thứ, khi các shell và các tiện ích dòng lệnh được quan tâm, là xa đáng ghét. Cú sốc ban đầu khi sử dụng thiết bị đầu cuối thay vì trình duyệt đồ họa, có thể khiến bạn bối rối và có thể hơi tức giận, nhưng chỉ sau một vài năm, bạn sẽ quen với nó và sẽ cười lại vào lúc bạn nghĩ rằng một trình duyệt GUI là "tình trạng hiện tại của mọi thứ".

Vì lợi ích của ý chí và để chào mừng bạn đến với thế giới của giao diện dòng lệnh, tôi sẽ cung cấp cho bạn một vài bí danh yêu thích của tôi. Và tôi sẽ cung cấp cho bạn rằng cp -i và rm -i tốt hơn hết là có các lệnh mặc định, bởi vì rất dễ mắc lỗi và vô tình xóa rất nhiều tệp. Tôi không đồng ý về tùy chọn đệ quy mặc dù.

# basic file manipulation, etc
alias cd....='cd ../..'
alias  cd...='cd ../..'
alias   cd..='cd ..'
alias    cd.='cd .'
alias    cd~='cd ~'
alias   ....='cd ../..'
alias    ...='cd ../..'
alias     ..='cd ..'
alias      ~='cd ~'

alias ls='ls --color=auto'
alias l='ls -CF'
alias l1='ls -1'
alias ll='ls -l'
alias lla='ls -la'
alias la='ls -a'


alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias mc='mv -i'

alias md="mkdir"
alias rd="rmdir"

alias less="less -i"
alias bc="bc -q"
alias KA="killall"

alias swipe='screen -wipe'
alias sdr='screen -dR $1'

# and some functions: 

spelling ()  {      echo $@ | LC_ALL=en_US aspell -a; }

google-search () {
    BROWSER="firefox '%s' &"
    args="${@}";
    args=`echo $args | sed 's/ /%20/g'`;
    url="https://www.google.no/search?hl=en&um=1&sa=1&q=";
    printf "$BROWSER\n" "$url$args" | sh
}

Cảm ơn! Nhưng cái gì là alias cd.='cd .' phải làm sao? Không có. các dir hiện tại?
NeuronQ

Tôi thường quên không gian hoặc viết sai lệnh. Tôi thực sự không thể nhớ tại sao tôi nghĩ rằng bí danh là hữu ích, tôi đã có nó trong một số năm. Tôi không sử dụng cd. nữa không. Tôi chỉ cho bạn một vài ví dụ ...
Ярослав Рахматуллин

1
Khi thư mục hiện tại của bạn đã bị xóa và được tạo lại, cd . cho phép bạn chuyển từ thư mục cũ sang thư mục mới.
BatchyX

Vâng, ok, nhưng điều đó có thường xuyên xảy ra không? Tôi nghĩ tôi có nghĩa là cho cd. để được cd ..
Ярослав Рахматуллин

1
@BojanMarkovic, ~ là vị trí mặc định cho cd, vì vậy bạn không bao giờ phải gõ cd ~ bởi vì chỉ cd sẽ đưa bạn đến đó
OmnipotentEntity
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.