gpt4 book ai didi

linux - ln 在使用通配符时出现意外行为

转载 作者:太空宇宙 更新时间:2023-11-04 09:05:40 25 4
gpt4 key购买 nike

我计划为此在 coreutils 上提交一个错误,因为这种行为是出乎意料的,并且在现实世界中没有任何实际用途......虽然一开始它确实让我发笑,因为我从来没有甚至知道可以创建文件名中带有通配符的文件。带有通配符的文件名有多实用?谁会使用这样的功能?

我最近运行了一个与此类似的 bash 命令:

ln -s ../../avatars/* ./

不幸的是,我没有添加正确数量的“../”,因此它没有向我提供信息性错误,而是创建了一个指向不存在的“*”文件的链接。我希望这样做:

ln -s "../../avatars/*" ./

因为这是解决此类文件名的正确方法。

在提交有关 coreutils 的错误之前,我想听听其他人的意见。这种行为是否有任何实际用途,或者应该提供有意义的错误消息?

是的,我知道可以只链接到整个目录,而不是其中的每个文件,但我不希望将新创建的文件复制到旧位置。目前只有几个文件被链接。

有些人甚至会说在符号链接(symbolic link)中使用通配符是不好的做法。但是,我确切地知道目录的内容,这比手动执行每个文件要快得多。

最佳答案

这不是错误。

在 shell 中,如果您使用不匹配任何内容的通配符模式,则不会替换该模式。例如,如果您这样做:

echo *.c

如果当前目录中没有.c 文件,它只会打印“*.c”。如果当前目录下有.c 文件,则*.c 将替换为该列表。

对于许多命令,如果您指定不存在的文件,则会出错,并且您会收到一条似乎有意义的消息,例如“无法访问 *.c”。但是对于 ln -s,因为它是一个符号链接(symbolic link),所以实际文件不必存在,它会继续并建立链接。

关于linux - ln 在使用通配符时出现意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12032311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com