为什么“ ls”突然用单引号引起来用空格包装项目?

怀亚特8740

我只是注意到,在我的其中一台机器上(运行Debian Sid),只要键入ls任何带空格的文件名,都将单引号引起来。

我立即检查了别名,却发现它们完整无缺。

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$

(图片)

另一个测试,文件名称中包含单引号(也回答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'

(图片)

使用新的coreutils-8.26输出进行更新(虽然它的混乱程度要小得多,但是默认情况下仍然很烦人)。感谢PádraigBrady的此打印输出:

$ ls
"'test 1.txt'"   test1.txt
'test 1.txt'    "thishasasinglequotehere'.txt"

$ ls -N
'test 1.txt'  test1.txt
test 1.txt    thishasasinglequotehere'.txt

为什么会这样呢?如何正确停止?

为了澄清,我本人将ls设置为自动彩色输出。它从来没有把引号括起来。

我正在运行bashcoreutils 8.25。

编辑:似乎coreutils开发人员认为(链接)是一个好主意,尽管打破了最少惊讶的原则以及UNIX已有46年以上的历史,但仍使其成为全球默认值

有什么方法可以解决此问题而无需重新编译?


更新-2017年10月-Debian Sid默认情况下重新启用了外壳转义引用。这太荒谬了。https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582

在上一个错误报告的回复链的底部,“更改是有意的,并将保留。” https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226

我以为这已经解决了。显然不是。

更新:2019年4月:刚刚在PHP发现了一个伪造的错误报告,错误报告是由对的更改引起的ls当您使开发人员感到困惑并生成错误的错误报告时,该重新考虑您的更改了。

更新:Android toyboxls现在正在执行类似的操作,但是使用反斜杠而不是引号。使用-q选项可使空格呈现为“问号字符”(由于它们显然不是空格,所以我没有检查它们是什么),因此到目前为止,我发现的唯一解决方法是不添加有问题的设备启动脚本时将其提供给脚本并提供源代码。ls如果在终端中,此功能将使用列,否则每行打印一个,而ls逐字逐字地进入打印空间,因为它是通过管道运行的。

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
}
扬·奎·佩布利克(Jan Kyu Peblik)

前言:虽然赞成这样的答案并每天称呼它可能会很令人满意,但是请放心,GNU coreutils的维护者们并不在乎SO的答案票;如果您实际上想鼓励他们改变,您可以需要按照此答案的描述给他们发送电子邮件


2019年更新
去年的某个时候,维护人员已经加倍努力,现在向所有[email protected]报告有关此问题的信息只是一个样板答复,指出他们网站上的页面长得令人难以置信,列出了人们对此更改所遇到的问题,他们承诺要无视
[email protected]报告带来的不断压力显然已经产生了作用,迫使这一庞大而荒谬的页面的产生,并有可能将愿意处理该问题的维护人员数量减少到一个。
当这么多人认为某件事是一个错误时,无论维护者是否同意,这都是一个错误。
继续向他们发送电子邮件仍然是鼓励变革的最简单方法。


为什么会这样?

几位coreutils维护者决定,他们比几十年来的事实标准更了解。


我如何正确停止它?

http://www.gnu.org/software/coreutils/coreutils.html

错误报告

如果您认为自己在Coreutils中发现了错误,请尽可能完整地将错误报告发送到<[email protected]>,它将自动输入到Coreutils错误跟踪器中。在报告错误之前,请阅读常见问题解答。关于如何编写错误报告和提出良好问题的非常有用且经常被引用的指南是文档“如何以明智的方式提出问题”。您可以浏览以前的帖子并搜索bug-coreutils档案。

还原 此更改的发行版:

发行版不受影响:

  • openSUSE(已使用-N)

“有什么方法可以解决这个问题而无需重新编译?

支持者会让你...

通过在其ls别名中添加-N来恢复旧格式

…在永恒的余下时间里,无论您身在何处,都可以在所有装置上进行安装。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Zsh:为什么\ n用单引号引起来?

为什么optionsText用单引号引起来?昏死

函数参数旁边用两个单引号引起来的字母是什么意思?

Python:为什么PostgreSQL表中的列名用双引号引起来?

为什么git将我的日志输出用引号引起来?

为什么Microsoft.FSharp.Quotations.Patterns中的模式用双引号引起来?

为什么即使将URL用双引号引起来,wget仍然会失败?

当表名用双引号引起来时,只能在Oracle SQL中找到表。为什么?

ShellCheck正在检查我的表达式实际上是否用双引号引起来;为什么?

为什么在bash中用引号引起来的变量扩展中的引号能很好地工作?

为什么$ _。Name在Powershell中用引号引起来时包含完整路径?

为什么波浪号(〜)不能用双引号引起来?

为什么波浪号(〜)不能用双引号引起来?

为什么我的数组不将每个单词都用双引号引起来?

是什么导致JSON响应被引号引起来?

为什么Excel电子表格中的所有文本列都以引号引起来

什么是sed comand来修复此文件,所以每行的最后一个值用双引号引起来

将Yaml数据用单引号引起来

变量无法用单引号引起来

',(用引号引起来)

为什么我的双引号是单引号?

从字符串中删除所有未用单引号或双引号引起来的空格

为什么介子用单引号解释我的 ccflags?

我为什么要远程:sh:2:语法错误:当我运行git push heroku master时,引号引起来的字符串未终止

用单引号而不是双引号引起来的C ++中的转义序列

exec用双引号引起来

用引号引起来的CSV行

用双引号引起来

Vim用引号引起来