Tôi có thể sử dụng cd ../ .. làm tên bí danh không?


11

Tôi đang sử dụng song song Windows và Ubuntu và làm công cụ điều khiển trên cả hai.

Trên Windows tôi có thể làm một

C:\Users\Thomas>cd..\..
C:\>

Tuy nhiên, trên Linux, điều này không hoạt động, không có dấu gạch chéo ngược cũng như dấu gạch chéo về phía trước.

21:17:10 $ cd../..
bash: cd../..: No such file or directory

Vì tôi thường mắc lỗi đó, tôi đã cố gắng xác định bí danh .bash_aliasescho tình huống đó:

alias cd../..='cd ../..'
alias cd..\..='cd ../..'

Khi tôi bắt đầu một bash mới, tôi nhận được

21:16:26 $ bash
bash: alias: `cd../..': invalid alias name

Làm thế nào tôi có thể thiết lập bí danh cho cd..\..cd../..chính xác?

Các cd..\..dường như có vấn đề với các ký tự thoát:

21:39:43 $ cd..\..
bash: cd....: command not found

Nó không hoạt động, ngay cả khi tôi xác định bí danh khác cho cd.....


2
Bạn không thể. Một lệnh, bí danh hoặc tên tệp không thể chứa /ký tự. Các \ phiên bản, mặt khác, nên hoạt động tốt.
fkraiem

@fkraiem: Có vẻ như phiên bản dấu gạch chéo ngược có vấn đề như ký tự thoát. Cập nhật câu hỏi.
Thomas Weller

Ồ, thực sự. Từ man bash: Các ký tự /, $, `và = và bất kỳ ký tự đại diện hoặc ký tự trích dẫn nào được liệt kê ở trên có thể không xuất hiện trong tên bí danh.
fkraiem

Chỉ trích. Tôi đã thử man aliasvà nó không tồn tại. Nếu bạn đưa ra như một câu trả lời, tôi sẽ chấp nhận nó.
Thomas Weller

Bí danh là một thứ, chức năng shell là một thứ khác. Có cái nhìn khác.
alexis

Câu trả lời:


10

/\là một trong những ký tự không thể xuất hiện trong tên bí danh Bash. Từ man bash:

Các ký tự /, $`và =và bất kỳ ký tự đại diện hoặc ký tự trích dẫn nào được liệt kê ở trên có thể không xuất hiện trong tên bí danh.

Như một giải pháp thay thế, bạn có thể chuyển sang Zsh, cho phép cả hai:

% grep 'alias.*cd' .zshrc 
alias cd../..='cd ../..'
alias cd..\\..='cd ../..'
% pwd
/Users/firas
% cd../..
% pwd
/ 
% cd
% pwd
/Users/firas
% cd..\..
% pwd
/

12

Bạn không thể sử dụng dấu gạch chéo trong tên bí danh. Bash cho phép chúng trong các tên hàm, tuy nhiên, vì vậy bạn có thể biến nó thành một hàm:

cd../.. () { cd ../..; }

Bạn không thể sử dụng dấu gạch chéo ngược trong bí danh hoặc tên hàm. Ký tự dấu gạch chéo ngược trích dẫn ký tự tiếp theo, do đó cd..\..được phân tích cú pháp cd...., trước khi chuỗi đó được tra cứu dưới dạng tên lệnh. Nếu bạn muốn gọi một lệnh được đặt tên cd..\.., bạn cần phải gõ cd..\\.., 'cd..\..'hoặc một cái gì đó tương đương. Hơn nữa, một tên lệnh được trích dẫn theo bất kỳ cách nào không được xem xét để tra cứu bí danh, vì vậy bạn không bao giờ có thể sử dụng tên bí danh có dấu gạch chéo ngược. Bash cũng không cho phép dấu gạch chéo ngược trong tên hàm. Vì cd..\..được phân tích cú pháp như cd...., bạn có thể định nghĩa một hàm được gọi cd....(như trên).

Nếu bạn sử dụng cdlệnh, bạn sẽ phải nhập khoảng trắng sau nó, giống như bất kỳ lệnh nào khác. Nhưng bạn có thể lưu gõ bằng cách không gõ cdgì cả. Đặt autocdtùy chọn với dòng sau trong ~/.bashrc:

shopt -s autocd

Sau đó, bạn có thể nhập một tên thư mục trên dòng lệnh, và thực thi các thư mục đó sẽ thay đổi thành thư mục đó.

~/some/sub/directory$ ../..
~/some$ 

Nếu tôi làm shoptđiều đó, có lẽ tôi sẽ sớm bỏ lỡ chức năng đó trên Windows :-)
Thomas Weller

Ừm, điều đó không đúng. Dấu gạch chéo được chấp nhận trong tên hàm bash.
alexis

@alexis À, đúng rồi, bạn có thể sử dụng dấu gạch chéo trong bash. Đã sửa, cảm ơn.
Gilles 'SO- ngừng trở nên xấu xa'

@ThomasW. Tất nhiên rồi. autocdlà một trong những lý do tôi chuyển sang zsh, trở lại khi bash không có nó. Cách duy nhất để sử dụng Windows là cài đặt Cygwin bằng mọi giá, hoàn thành với zsh.
Gilles 'SO- ngừng trở nên xấu xa'

5

"Bạn không thể sử dụng dấu gạch chéo trong bí danh hoặc tên hàm "? Đó là tin tức với tôi. Tôi đã sử dụng chức năng shell sau nhiều năm trên bash Linux và OS X và chưa bao giờ gặp sự cố:

function ../.. { cd ../..; echo "$PWD"; }

Đương nhiên, cd../..là một tên chức năng tốt là tốt. Một dấu gạch chéo có thể được sử dụng trong tên hàm shell.

Đối với phiên bản dấu gạch chéo ngược, bạn không thể nhúng nó vào bí danh hoặc tên hàm nhưng bạn không phải: Khi bạn nhập cd..\.., bash diễn giải dấu gạch chéo ngược là một lối thoát và cố gắng thực hiện kết quả cd..... Vì vậy, xác định điều đó và bạn có thể làm mọi thứ bạn đang theo đuổi. Không có gì.

function cd.... { cd ../..; } 

2

Nếu bạn muốn giữ bí danh, tại sao không làm:

alias   ..='cd ..'
alias  ...='cd ../../' 
alias ....='cd ../../../'

Hoặc, nếu bạn cần phải đi con đường trở lại:

alias   .3='cd ../../../' 
alias   .4='cd ../../../../'
alias   .5='cd ../../../../../'
# how far back do you need to go on a normal basis..?

Không biết làm thế nào tốt giúp bạn giữ tinh thần đồng bộ với bộ não Windows của bạn, nhưng đây vẫn có vẻ là một cách đơn giản để đi. (Ít nhất là đối với những người trong chúng ta đủ may mắn để không cần phải lo lắng về cách mọi thứ được thực hiện trên Windows.)

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.