Tôi chỉ nhận thấy rằng trên một trong các máy của mình (chạy Debian Sid) bất cứ khi nào tôi nhập ls
bất kỳ tên tệp nào có dấu cách đều có dấu ngoặc đơn xung quanh nó.
Tôi ngay lập tức kiểm tra bí danh của mình, chỉ để thấy chúng còn nguyên vẹn.
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt
wyatt@debian630:~/testdir$ alias
alias ls='ls --color=auto'
alias wget='wget --content-disposition'
wyatt@debian630:~/testdir$
Một thử nghiệm khác, với các tệp chứa dấu ngoặc đơn trong tên của họ (cũng trả lời yêu cầu của jimmij):
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt 'thishasasinglequotehere'\''.txt'
wyatt@debian630:~/testdir$ touch "'test 1.txt'"
wyatt@debian630:~/testdir$ ls
''\''test 1.txt'\''' test1.txt
'test 1.txt' 'thishasasinglequotehere'\''.txt'
cập nhật với đầu ra coreutils-8.26 mới (được thừa nhận là ít gây nhầm lẫn hơn, nhưng vẫn gây khó chịu theo mặc định). Cảm ơn Pádraig Brady cho bản in này:
$ ls
"'test 1.txt'" test1.txt
'test 1.txt' "thishasasinglequotehere'.txt"
$ ls -N
'test 1.txt' test1.txt
test 1.txt thishasasinglequotehere'.txt
Tại sao chuyện này đang xảy ra? Làm thế nào để tôi dừng nó đúng cách?
Để làm rõ, bản thân tôi đặt ls thành đầu ra màu tự động. Nó không bao giờ đặt dấu ngoặc kép xung quanh những thứ trước đây.
Tôi đang chạy bash
và coreutils 8.25.
EDIT: Xuất hiện các nhà phát triển coreutils nghĩ rằng (liên kết) sẽ là một ý tưởng tốt để biến nó thành một mặc định toàn cầu mặc dù phá vỡ nguyên tắc ít gây ngạc nhiên cũng như hơn 46 năm truyền thống UNIX.
Bất kỳ cách nào để khắc phục điều này mà không cần biên dịch lại?
CẬP NHẬT - Tháng 10 năm 2017 - Debian Sid đã kích hoạt lại trích dẫn thoát vỏ theo mặc định. Chuyện này ngày càng trở nên tức cười. https://bugs.debian.org/cgi-bin/orpreport.cgi?orms=877582
Và ở dưới cùng của chuỗi trả lời cho báo cáo lỗi trước đó, "sự thay đổi là có chủ ý và sẽ vẫn còn." https://bugs.debian.org/cgi-bin/ormsreport.cgi?orms=813164#226
Tôi nghĩ rằng điều này đã được giải quyết. Rõ ràng là không.
CẬP NHẬT: Tháng 4 năm 2019: Chỉ cần tìm thấy một báo cáo lỗi siêu cấp trong PHP được gây ra bởi thay đổi này ls
. Khi bạn gây nhầm lẫn cho các nhà phát triển và tạo báo cáo lỗi sai, đã đến lúc nghĩ lại những thay đổi của bạn.
Cập nhật: Android toybox ls
hiện đang làm một cái gì đó tương tự như thế này nhưng với dấu gạch chéo ngược thay vì dấu ngoặc kép. Sử dụng tùy chọn -q làm cho không gian hiển thị dưới dạng 'ký tự dấu hỏi' (Tôi chưa kiểm tra xem chúng là gì, vì rõ ràng chúng không phải là khoảng trắng), do đó, cách khắc phục duy nhất tôi tìm thấy cho đến nay mà không cần root thiết bị trong câu hỏi là thêm Điều này đến một kịch bản và nguồn nó khi khởi chạy một shell. Hàm này ls
sử dụng các cột nếu trong một thiết bị đầu cuối và nếu không thì in một dòng trên mỗi dòng, trong khi lừa ls
vào các không gian in nguyên văn vì nó chạy qua một đường ống.
ls() {
# only way I can stop ls from escaping with backslashes
if [ -t 1 ]; then
/system/bin/ls -C "$@" |cat
else
/system/bin/ls "$@" |cat
fi
}
ls | cat
và xem nếu nó đi. Nếu tôi có một cỗ máy thời gian, tôi sẽ quay lại Bell Labs ~ 1970 và cố gắng thuyết phục Ken Thompson rằng cho phép không gian trong tên tệp và thư mục là một ý tưởng tồi. :-P
'*'
. Tôi đoán tôi sẽ đi xung quanh để thêm ls
bí danh cho tất cả các máy của mình để loại bỏ nó ...
QUOTING_STYLE=literal
vì bí danh. (Tôi đoán đó là vấn đề của hương vị, nhưng tôi thích biến số hơn.)
ls
lệnh.