Điểm:1

Tab Bash không tự động hoàn thành các thư mục trong phạm vi node_module bắt đầu bằng @ (ký tự)

lá cờ in

Tôi có hành vi kỳ lạ sau, thư mục sau tồn tại @fortawesome

Nhưng khi tôi nhấn

phím tab cd

không có thư mục nào bắt đầu bằng "@" xuất hiện. Tại sao điều này xảy ra/làm thế nào tôi có thể điều tra thêm?

lá cờ cn
bằng chứng là bạn đang sử dụng BASH :-) 2 tệp và 1 thư mục bắt đầu bằng @ và bash autocomplete SẼ chọn thư mục khi bạn thực hiện `cd {tab}`. `touch @1 @2 && mkdir @5 && ls @1 @2 @5` và `cd {tab}` biến nó thành `cd @5/`
Nate T avatar
lá cờ it
@Rinzwind Đã xác nhận: Tôi vừa thử nghiệm vào ngày 20.04.2 (bash 5.0.17(1)-version). Nó hiển thị thư mục kiểm tra `~/@hello` của tôi, nhưng nó bỏ qua biểu tượng @ khi quyết định thứ tự sắp xếp. Của tôi nằm trong phần '_H_'.
Nate T avatar
lá cờ it
@OP bạn có ý nghĩa gì với thư mục phạm vi node_module? Như trong một gói nút?
partizanos avatar
lá cờ in
Tôi nghĩ đó là vì @ là một ký tự đặc biệt trong bash. @Rinzwind echo "$SHELL" hiển thị /bin/bash
partizanos avatar
lá cờ in
@NateT Tôi nghĩ vấn đề có thể liên quan đến thực tế đó là gói có phạm vi gật đầu (đây là các thư mục bắt đầu bằng ký tự @ trong tên của chúng theo quy ước)
partizanos avatar
lá cờ in
@Rinzwind hơn nữa khi bạn không viết @ chỉ cần tab cd thì bạn sẽ chuyển đến thư mục @5 nhưng nếu bạn viết `cd @5tab` thì không
lá cờ cn
quan trọng nhất là bạn đã sắp xếp nó ;-)
Điểm:1
lá cờ in

Bởi vì @ là một ký tự đặc biệt, việc thêm dấu gạch chéo ngược vào đầu đã giải quyết vấn đề. I E. cd \@tab trong khi tự động điền chính xác tên của các thư mục.

Nate T avatar
lá cờ it
Bash của tôi cho thấy nó bất kể. Bạn ở phiên bản nào? `bash --version`. Phím tắt không hoạt động. Nó in đầu vào từ .bashrc
partizanos avatar
lá cờ in
Phiên bản bash của tôi từ `bash --version` là 5.0.17(1)-release (x86_64-pc-linux-gnu). Ý bạn là phím tắt nào?
Nate T avatar
lá cờ it
Mua lối tắt, ý tôi chỉ là sử dụng cách viết tắt cho tùy chọn --version, như `bash - v`. Chúng tôi có cùng một phiên bản bash. Nó phải là một chương trình khác khiến trình bao của bạn sửa đổi hành vi của nó. Câu hỏi đặt ra là chương trình nào và nó sửa đổi chính xác như thế nào. Bạn có thể kiểm tra giá trị của BASHOPTS không? Lệnh chỉ là `echo $BASHOPTS`
Nate T avatar
lá cờ it
Nếu bạn thêm giá trị của nó vào câu hỏi của mình, chúng tôi có thể so sánh nó với giá trị của tôi và có thể biết được manh mối về những gì đang diễn ra. Nó phải là một mảng.
partizanos avatar
lá cờ in
`echo $BASHOPTS` xuất ra `checkwinsize:cmdhist:complete_fullquote:expand_aliases:extquote:force_fignore:globasciiranges:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath`
Điểm:1
lá cờ it

Nếu bạn không tạo thư mục bằng hệ thống linux, có khả năng bash đã hoàn thành và do đó bash không xem nó dưới dạng tệp.

Một thư mục trong Linux thực chất chỉ là một tập tin. chứa siêu dữ liệu, bao gồm cả vị trí của các tệp nằm "trong" nó. Điều này khác rất nhiều so với cách Windows thực hiện.

Nếu mô-đun (giả sử rằng đó là mô-đun nút) đến từ npm, thì rất có thể nó được tạo bởi hệ thống tệp NTFS.

Tôi không chắc điều này sẽ ảnh hưởng như thế nào đến cách hoàn thành bash nhìn thấy nó, nhưng nếu nó không hiển thị, đó có thể là lý do.

Làm thế nào tôi có thể điều tra nó nhiều hơn.

Để đảm bảo rằng thư mục vẫn còn đó, bạn chỉ có thể đĩa CD bên trong nó. Dù bằng cách nào, điều này sẽ cung cấp cho bạn thêm thông tin. Ngoài ra, chạy ls -a ~ hoặc là ~ nếu bạn có nó.

Bạn cũng nên tạo một thư mục mới có cùng quy ước đặt tên để xem nó có gặp vấn đề tương tự không.

Ngoài ra, có một công cụ bạn có thể nhận được từ apt được gọi là cây. Nó giống như ls, nhưng đệ quy. Nó sẽ xuất toàn bộ cấu trúc thư mục của thư mục hiện tại.

Để xem Linux đã "chấp nhận" thư mục đúng chưa, bạn có thể kiểm tra các quyền.

la -a -n

Hãy chú ý đến ký tự đầu tiên trong danh sách cho thư mục thủ phạm. Nó phải là một 'd'. Nếu nó là '-', thì đó hoàn toàn không phải là một thư mục. Bây giờ nó là một tệp liên quan đến HĐH, điều đó có thể có nghĩa là mọi thứ bên trong đều bị xóa sạch.

Thao tác này cũng sẽ hiển thị thông tin về chủ sở hữu và nhóm. Nếu nó có tất cả các thuộc tính này, thì nó chắc chắn sẽ xuất hiện.

Trong trường hợp này, hãy chạy lại các quy trình trên và chụp ảnh màn hình kết quả của từng quy trình. Nếu bạn thêm chúng vào câu hỏi của mình, tôi đảm bảo ai đó sẽ biết chuyện gì đang xảy ra.

CHỈNH SỬA:

Mặc dù tôi rất vui vì bạn đã tìm ra giải pháp cho vấn đề này, nhưng tôi vẫn không khỏi thắc mắc tại sao máy của bạn lại gặp trường hợp này mà không phải của tôi. Như tôi đã đề cập trước đó, tôi đã thử nghiệm nhẹ Ubuntu của riêng mình

(Ubuntu = phiên bản 20.04.2 -- bash = phiên bản 5.0.17 phát hành)

bằng cách làm một @kiểm tra và kiểm tra kết quả chạy các lệnh & ứng dụng khác nhau trong cùng một thư mục mẹ. Tôi đã làm điều này trước khi bạn phát hiện ra rằng bạn có thể thoát khỏi nó. Vấn đề là tất cả chúng đều hoạt động như mong đợi đối với tôi.

Nếu điều đó xảy ra với bạn và bạn đang sử dụng phiên bản Ubuntu khá mới, thì chắc chắn sẽ có những người khác gặp vấn đề tương tự.

Hiện tại, tôi thấy có hai khả năng chính là nguyên nhân của sự khác biệt. Hoặc là bằng cách nào đó chúng ta đã gặp phải một tình trạng cạnh kỳ lạ nào đó mà chưa ai khác phát hiện ra (đến nỗi tôi cảm thấy hơi xấu hổ khi gõ nó.. XD), hoặc một chương trình khác trên hệ thống của bạn đang thay đổi hành vi của trình bao.

Như tôi đã gợi ý trong các nhận xét, điều này có thể thực hiện được thông qua thao tác với môi trường trình bao. Có một vài biến môi trường (trong môi trường 20.04 của tôi có 11 biến) bắt đầu bằng mẫu BASHvà trỏ trực tiếp đến thuộc tính bash shell. Chúng cực kỳ dễ xác định, vì tất cả chúng đều ở ngay đầu danh sách được hiển thị khi bạn chạy chương trình. bộ chỉ huy. Nếu bạn đi qua ít hơn, như trong:

bộ | ít hơn

chúng sẽ là thứ đầu tiên bạn nhìn thấy trong màn hình thiết bị đầu cuối. Mặc dù hầu hết chúng chỉ có nghĩa là hằng số để cung cấp quyền truy cập vào thông tin trong tập lệnh của bạn, v.v. và hiển thị thông tin chứa trong đó (ví dụ: BASH_VERSION), những người khác có thể kiểm soát thông tin mà chúng tham chiếu đến. Một biến như vậy nổi bật với tôi là BASHOPTS. Trên thực tế, nếu hành vi là kết quả của giá trị của một biến, thì hành vi này sẽ là một ứng cử viên sáng giá cho thủ phạm.

Điều đó nói rằng, một mục đích chính của toàn bộ môi trường là điều khiển hành vi của trình bao.Kết quả là, nó có thể là bất kỳ biến nào trong môi trường của bạn... hoặc thứ gì đó hoàn toàn khác.

Mục đích của tôi trong việc tiếp tục khắc phục sự cố này là để nếu bất kỳ ai khác đến đây tìm giải pháp cho vấn đề này, họ sẽ không chỉ biết cách khắc phục sự cố mà còn biết nguyên nhân gây ra sự cố.

Hiện tại có rất ít thông tin trên web về vấn đề này (tôi không thể tìm thấy gì cả) và bản thân điều đó đã nói lên rất nhiều điều. Đây không bao giờ là trường hợp. Không có câu trả lời nào đủ hiếm, nhưng không có câu hỏi nào gần như chưa từng nghe thấy. Thông thường ai đó ở đâu đó đã gặp vấn đề tương tự và đã đăng về vấn đề đó.

GHI CHÚ:

Qua 'cái này là có thể', ý tôi là thao túng hành vi của bash theo nghĩa chung. Tôi không biết liệu có thể sửa đổi những ký tự mà bash coi là 'đặc biệt' hay không. Điều đó nói rằng, tôi không thể thấy bất kỳ kết luận chấp nhận được khác. Tôi đã phải kéo dài một chút chỉ để đến với cái này. Nếu bất cứ ai khác có bất kỳ ý tưởng, tôi là tất cả các tai.

partizanos avatar
lá cờ in
Sử dụng lệnh `ls ` các thư mục @XX xuất hiện thành công. Vấn đề là khi nhấn `cd @tab`thư mục @XX không xuất hiện. Như thể @ là một ký tự đặc biệt trong bash. (nhưng tôi không thể tìm thấy @ mà không có $ ở phía trước (`$@`) có ý nghĩa đặc biệt https://www.gnu.org/software/bash/manual/bash.html ). Kịch bản thú vị với NTFS nếu bạn có một số ví dụ, điều này đã xảy ra, có thể đề cập đến nó trong trường hợp ai đó gặp phải vấn đề tương tự (không phải trường hợp của tôi vì đó là môi trường dựa trên Ubuntu). Cảm ơn đã giúp đỡ :)
Nate T avatar
lá cờ it
Tôi mất quá nhiều thời gian để trả lời. Tôi đã bắt đầu ngay sau bình luận đầu tiên của mình và khi tôi hoàn thành, bạn đã giải và trả lời xong. Tôi đoán đó là cách nó đi đôi khi. Điều quan trọng là bạn đã tìm ra giải pháp. Tôi sẽ lấy W dựa trên đó. Điều đó nói rằng, tôi vẫn quan tâm, bởi vì tôi đã chạy một vài thử nghiệm trước đó và hệ thống của tôi không coi nó là một ký tự đặc biệt bên ngoài các ứng dụng regex như `grep`. Loại công cụ này luôn thu hút tôi.XD ... bạn đã bao giờ kiểm tra phiên bản bash của mình chưa? Có thể hành vi đã được sửa đổi tại một số điểm.
Nate T avatar
lá cờ it
Ngoài ra, bạn nên kiểm tra nó trên một bash khác, như /usr/bin/bash. Nó cũng có thể là một env. biến được đặt bởi một gói được cài đặt trên hệ thống của bạn. Khi bạn chạy `set`, có một số khả dụng ở đầu danh sách, một số khả năng có khả năng sửa đổi hành vi mặc định của trình bao theo những cách khác nhau.
Nate T avatar
lá cờ it
Sẽ chuyển những thứ này (ít nhất là các phần có liên quan) vào câu trả lời của tôi để thu dọn các bình luận.
partizanos avatar
lá cờ in
Phiên bản bash của tôi từ `bash --version` là 5.0.17(1)-release (x86_64-pc-linux-gnu)
partizanos avatar
lá cờ in
Trong Shell khác, ví dụ: ~/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin tự động hoàn thành không yêu cầu dấu gạch chéo ngược. (Máy khác nhau có cửa sổ) Trong google collab, hành vi cũng tự động hoàn thành trực tiếp với GNU bash, phiên bản 4.4.20(1)-release (x86_64-pc-linux-gnu)
sudodus avatar
lá cờ jp
@partizanos, quá trình hoàn thành TAB hoạt động với `@name` trong bash --version là 5.0.17(1)-release (x86_64-pc-linux-gnu) trong Ubuntu 20.04 LTS.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.