在大多数 shellnullglob
中不是默认的。这意味着,例如,如果您运行此命令
ls *
Run Code Online (Sandbox Code Playgroud)
在一个空目录中,它会将*
glob扩展为一个 literal *
,而不是一个空的参数列表。有一些方法可以改变这种行为,这样*
在一个空目录中将返回一个空的参数列表,这看起来更直观。
那么,是否有理由nullglob
默认禁用?如果是,那是什么原因?
我正在为基于 Debian 的嵌入式 Linux 构建映像。我apt-get update
之前确实在我想用作该图像基础的设备上使用过,因此下面的列表/var/lib/apt/lists
非常大(大小接近 100 MB)。
我想保留apt-get
功能(所以我不想删除 apt 存储库)但我想释放这些列表中使用的空间(列表几乎是图像大小的两倍)。
有谁知道这是怎么做到的吗?我可以删除下面的文件/var/lib/apt/lists
吗?
在 Linux 和 Windows CTRL + 中 C 有两种截然不同的含义,这取决于您使用的程序。在某些程序(主要是 GUI 程序)中,它的意思是“复制”,而在其他程序(几乎所有命令行工具)中,它的意思是“中断”或“退出”。
这对于从使用 GUI 转向使用命令行的人来说尤其麻烦,因为“复制”是一种完全安全的操作,而中断可能会杀死您当前正在使用的程序,从而可能破坏您的工作。
原因是什么,或者这种分歧的起源在哪里?
在我的/etc/inittab
我使用以下行:
ttyS0::respawn:/bin/login
Run Code Online (Sandbox Code Playgroud)
如果我想连接到串行端口,这会给我一个登录提示。但它不断呼应这一点:
[hostname] login:
Login timed out [hostname] login:
Login timed out [hostname] login:
Run Code Online (Sandbox Code Playgroud)
我怎样才能阻止它并让它不超时?
因此,要澄清评论中的内容:
login
不会再超时了LOGIN_TIMEOUT
在/etc/login.defs
为这个答案解释:变化TTY登录超时- ArchLinux的在构建一个小的 Expect 脚本时,我注意到,执行脚本后,一些字符会自动出现在 bash 的输入中。我以前在其他程序上见过这种情况,但在这里我有一些可重现的东西。
我的期望脚本如下:
#!/usr/bin/expect
spawn ssh root@[lindex $argv 0]
expect "password:"
send "[lindex $argv 1]\r"
expect "~#"
Run Code Online (Sandbox Code Playgroud)
这是结果:
user@PC:~$ expect test.exp 192.168.0.2 root
spawn ssh root@192.168.0.2
root@192.168.0.2's password:
^[[51;117Rroot@device:~# user@PC:~$ ;117R
-bash: syntax error near unexpected token `;'
user@PC:~$
Run Code Online (Sandbox Code Playgroud)
正如您在输出的第五行中看到的那样,stdout ( ^[[51;117R
) 上有一些随机字符,其中一些泄漏到 shell 输入行 ( ;117R
) 上。如果我在执行 Expect 脚本后按 Enter 键,bash 会尝试解释该 ( ;117R
),就像我已将其输入到 bash 中一样。
我的问题是,这里发生了什么以及如何阻止它?