bash - shell glob 扩展如何像 ls -l * 一样工作?
问题描述
shell如何扩展'*',如
ls -l *
是否有任何系统调用在后台发生以读取目录中的所有文件?我尝试了 strace 但没有显示任何特定于 globbing 的系统调用
解决方案
glob 由 bash 扩展,而不是由ls
. 当您运行时,strace ls *
仅ls
跟踪,但 glob 在运行之前ls
甚至strace
运行之前都会扩展,因此您不会在跟踪中看到它的系统调用。
要跟踪 glob 的扩展,请使用strace bash -c 'echo *'
. 这还将包括来自 shell 启动的系统调用。要仅显示为echo *
您完成的系统调用,可以使用...过滤结果
strace bash -c '[ -e startglob ]; echo *; [ -e endglob ]' 2>&1 |
sed -n '/"startglob"/,/"endglob"/p'
推荐阅读
- c# - async/await 是否需要一个线程来表示异步操作已完成?
- python - 将 Pandas DatetimeIndex 与具有条件的较小 DatetimeIndex 进行比较
- node.js - 如何为 Twitter API 做监听节点 js 端口
- java - 如何在java中声明数组以键入long?
- javascript - 如何防止 jQuery 的 insertAfter() 方法复制我正在移动的 HTML?
- java - reflections.getTypesAnnotatedWith 在 Tomcat 上运行良好,但在 Weblogic 上运行良好
- php - 使用 PHP 向使用 Gmail API 发送的电子邮件添加密件抄送
- javascript - 如何在vue中按条件包装html代码而不重复代码?
- android - 最佳实践 Android 包名和 IOS bundleID
- python-3.x - 将处理后的 CSV 文件导入 Pandas 数据框