今天我注意到 Perl 中发生了一些变化,可能是最近,它运行 shell 命令的方式发生了变化。有人可以解释一下发生了什么变化吗?我自己找不到答案,遗憾的是我们以最艰难的方式了解到了这一变化。一些新用户在他们的新主目录中获得了有趣的内容......
我正在运行一个简单的命令/脚本:
#!/usr/bin/perl -w
system("ls -R /etc/skel/.[^.]*");
在 Debian 11: 中perl v5.32.1
,输出只是以下内容/etc/skel
(如预期):
. .. .bash_logout .bashrc .face .face.icon .kshrc .profile
但在 Debian 12 中:perl v5.36.0
通配符^
被忽略,整体/etc
被读取,这意味着..
不被忽略。
当我更改^
为替代符号!
:时system("ls -R /etc/skel/.[!.]*");
,它再次按预期运行。
问题是,Perl 在处理符号!
和调用^
方面发生了什么变化system()
?
编辑: 2023年9月29日 19:50
我在两台服务器上做了一些测试,看起来有些东西发生了dash
变化?
Debian 11:(我在破折号中dash Version: 0.5.11+git20200708+dd9ef66-5
没有看到标志,所以这是来自 APT)。--version
root@s:~# dash -c 'ls -R /etc/skel/.[^.]*'
/etc/skel/.bash_logout /etc/skel/.bashrc /etc/skel/.forward+spam /etc/skel/.kshrc /etc/skel/.profile
root@s:~# dash -c 'ls -R /etc/skel/.[!.]*'
/etc/skel/.bash_logout /etc/skel/.bashrc /etc/skel/.forward+spam /etc/skel/.kshrc /etc/skel/.profile
Debian 12:dash Version: 0.5.12-2
[students] ~ ➽ $ dash -c 'ls -R /etc/skel/.[^.]*' | more
/etc/skel/..:
a2ps.cfg
a2ps-site.cfg
adduser.conf
adjtime
aliases
aliases.db
alsa
alternatives
[students] ~ ➽ $ dash -c 'ls -R /etc/skel/.[!.]*'
/etc/skel/.bash_logout /etc/skel/.bashrc /etc/skel/.face /etc/skel/.face.icon /etc/skel/.kshrc /etc/skel/.profile
亲切的问候,卡米尔