奇怪的命令后无法返回 bash 提示符

奇怪的命令后无法返回 bash 提示符

我正在摆弄不同的通配符并运行以下命令:

ls testdir/!(*/)

之后我完全无法回到 bash 提示符。 ^C、^D 甚至 ^Z 都不起作用:它们只是打印那些文字字符。

更新:我发现只需输入:

ls !()

具有相同的效果。删除我的 .bash_history 没有帮助。

那么,两个问题:

  1. 是否可以从该命令中恢复?

  2. 我究竟告诉 bash 做什么以及它在等待什么?

笔记:

如果我只是运行!(*/)它只会说“未找到事件”

如果我运行ls !(*/)或者echo !(*/)然后它会执行与上面相同的操作

bash 进程在 CPU 利用率为 100% 的情况下出现在列表中,但不是ls

在 lxc 容器上运行相同的命令只会给出“未找到事件” 我的 bash 选项几乎都是 Ubuntu 14.04。没什么奇怪的。

set -x在命令之前使用ls不会回显任何内容。

注释2:shopt的输出

自动CD关闭
cdable_vars 关闭
cd 关闭
检查哈希关闭
检查工作关闭
检查窗口大小
cmdhist on
兼容31关闭
compat32 关闭
兼容40关闭
兼容41关闭
兼容42关闭
完整完整引用
目录展开关闭
驱散
点团关闭
执行失败关闭
展开别名
外部调试关闭
外部全局开启
外加引号
故障全局关闭
强制忽略
全球星关闭
关闭全球范围
gnu_errfmt 关闭
历史附加于
历史记录关闭
历史验证关闭
主机完全关闭
huponexit 关闭
互动评论
最后一管关闭
关闭
登录外壳关闭
邮件警告关闭
no_empty_cmd_completion 关闭
关闭 nocaseglob
无案例匹配关闭
空球关闭
编程补偿开启
提示变量打开
限制外壳关闭
关闭shift_verbose
源路径打开
xpg_echo 关闭

set +o 的输出

设置 +o allexport
设置 -o 大括号展开
设置-o emacs
set +o 错误退出
设置 +o errtrace
设置 +o 函数跟踪
设置-o hashall
设置 -o histexpand
设置历史记录
设置 +o 忽略
设置-o 交互式评论
设置 +o 关键字
设置监视器
设置 +o noclobber
设置+o noexec
设置 +o noglob
设置+o nolog
设置 +o 通知
set +o 名词集
设置 +o onecmd
设置 +o 物理
set +o 管道故障
设置 +o posix
设置 +o 特权
设置 +o 详细
设置 +o vi
设置 +o xtrace

答案1

shw@shw:/tmp $ ls testdir/!(*/) & pidls=$!
[1] 18453
shw@shw:/tmp $ 
shw@shw:/tmp $ cat /proc/18453/cmdline 
bashshw@shw:/tmp $ 
shw@shw:/tmp $ 
shw@shw:/tmp $ kill -9 18453
shw@shw:/tmp $ 
[1]+  Killed                  ls --color=auto testdir/!(*/)
shw@shw:/tmp $ 

相关内容