- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我创建了一个别名,以免每次我移动到一个新目录时都写 ls:
alias cl='cd_(){ cd "$@" && ls; }; cd_'
假设我有一个名为“下载”的文件夹(我当然碰巧有),所以我只需在终端中键入以下内容:
cl Downloads
现在我会在“下载”文件夹中找到自己,并收到文件夹中所有内容的列表,例如:example.txt、hack.hs、picture.jpg、...
如果我想移动到一个目录并查看是否有 hack.hs,我可以尝试这样的操作:
cl Downloads | grep hack
我得到的只是输出:
黑客.hs
但我将保留在原来的文件夹中(这意味着我不在下载中)。
我知道发生这种情况是因为每个命令都在子 shell 中执行,因此 cd Downloads && ls 在它自己的子 shell 中执行,然后输出(即我拥有的东西列表)通过管道重定向到 grep .这就是我不在新文件夹中的原因。
我的问题如下:
我该怎么做才能编写类似“cl Downloads | grep hack”的内容并获得“hack”-grep 列表并位于下载文件夹中?
非常感谢,波尔
对于曾经用谷歌搜索这个的人:@gniourf_gniourf 提出了一个快速修复:
cl Downloads > >(grep hack)
有些人将此问题标记为可能与 Make bash alias that takes duplicates 重复,但我的 bash 别名已经采用参数这一事实表明情况并非如此。手头的问题是关于如何在当前 shell 中执行命令,同时将输出重定向到另一个命令。
最佳答案
如您所知(并在 BashFAQ #24 中介绍),原因
{ cd "$@" && ls; } | grep ...
...防止 cd
的结果在外壳中可见是因为 POSIX 不保证管道的任何组件在外壳中运行。 (一些 shell,包括 ksh [开箱即用] 和启用了非默认选项的非常现代的 bash,偶尔或可选地运行父 shell 中管道的最后一段,但这不能移植依赖上)。
一种适用于所有 POSIX shell 的避免这种情况的方法是将输出定向到命名管道,从而避免设置管道:
mkfifo mypipe
grep ... <mypipe &
{ cd "$@" && ls; } >mypipe
在现代 ksh 和 bash 中,有一个更短的语法可以为您完成此操作——如果操作系统提供了命名管道,则使用 /dev/fd
条目而不是设置命名管道:
{ cd "$@" && ls; } > >(grep ...)
在这种情况下,>(grep ...)
被替换为指向 FIFO 或 /dev/fd
条目的文件名,当写入时到有问题的进程,将输出重定向到 grep
-- 但没有管道。
顺便说一句——我真的希望你以这种方式使用 ls
作为一个例子。 ls
的输出没有针对所有可能的文件名的范围明确指定,因此 grepping 它天生就不可靠。如果您确实想要构建流式结果,请考虑使用 printf '%s\0' *
在目录中发出一个以 NUL 分隔的非隐藏名称列表;或使用 glob expressions检查与特定模式匹配的文件(BashFAQ #4 涵盖了类似的场景); extglobs如果您需要比 POSIX 模式支持更接近完整的正则表达式匹配支持,则可用。
关于linux - 光盘 && ls | grep : How to execute a command in the current shell and pass the output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38074882/
我有一个 jQuery 日期选择器。我想将默认日期设置为“当前月份、当前日期(当前年份-18)”,但在设置 defaultDate 属性时遇到问题。显示的默认年份是 1920 年,据说是 1995 年
我有下面的 C 程序来实现升序链表。问题出在 buildList() 函数中,因此您可以忽略除 main() 和 buildList() 之外的其他函数。 #include #include stru
嗯,想象一下 current.txt 文件: asdf base.txt 文件: asdf 其他.txt文件: asdf 当我进行三向 merge 时 git merge-file current.t
我试图在鼠标悬停时生成一个 :after 伪元素。例如: .email{ width:100px; overflow:hidden; text-overflow:ellipsi
为什么 $('a.current').removeClass('current'); 不适用于此 jquery 选项卡? http://jsfiddle.net/laukstein/ytnw9/8/
我正在创建一个应用程序(Outlook 的 Office 加载项) 我遇到的问题是更新我的屏幕。我知道我需要调用 Dispatcher,但是它在我的 ViewModel 中始终为 null p
我为客户开发网络和移动应用程序。在我当前的架构中,许多资源在 Web 访问和移动访问之间共享。 aspx 页面可以显示在网络上,也可以在移动应用程序中调用 WebView 。我的问题是: WebOpe
我通过调用 IEnumerable.GetEnumerator() 得到了一个枚举器,然后我称它为MoveNext()直到它返回false,然后访问它的Current属性(property)。令我惊讶
我正在尝试动态查找当前运行的函数(此函数)的名称,即 (defun my-func () (remove-hook 'some-hook this-function) (do-
阅读了短语 "The current SynchronizationContext is a property of the current thread" correct" ,我有点懵了…… 在 V
集成 IOS STRIPE TERMINAL SDK对于BBPOS Chipper 2X BT使用 swift 。我们已经开发并测试了该系统,并且运行良好。但是当我们将它交给其他国家的客户时,他们收到
当我在训练期间编写的类上实现 IEnumerable 和 IEnumerator 时,我注意到我需要为属性“Current”指定两个实现。 public class PeopleEnumerator
我原以为对实现了 IEnumerable 的空集合执行以下代码会抛出异常: var enumerator = collection.GetEnumerator(); enumerator.MoveNe
应Application.Current.Shutdown()不用作关闭 WPF 应用程序的最佳实践? 我有一个小的多窗口应用程序,“关机”似乎对我所有的退出命令都很好。但是,我被告知要始终使用 Ap
在 XPath 1.0 中,有一个函数 current() 可以派上用场,当我根据我当时所在的节点引用 XML 中其他地方的节点时。我的 XML 具有如下结构:
在 MVC 中,这两者有什么区别? 它们看起来相同,甚至返回相同的类型/类System.Web.Security.RolePrincipal,但有一些微妙之处。 例如。当针对通过 ClaimsPrin
这个问题在这里已经有了答案: What is the difference between an App and Application in c#.net? (1 个回答) 关闭 7 年前。 这两
我正在为我的团队开发一个代码生成器 (VSIX),在我与 VSIX 可扩展性框架作斗争之后,我打算使用 Roslyn 作为基础引擎。 我的代码生成器目前能够为解决方案生成一个新的 csproj,并且能
为什么 $('a.current').parent('li').addClass('current'); 和 $(this).hasClass('current')。 parent('li').add
当我使用 Xcode 调试我的 iOS 程序时,gdb 将其显示在控制台 View 上,并且没有发生任何错误。 我只想知道输出“Current language: auto; currently ob
我是一名优秀的程序员,十分优秀!