如何在一个输入上执行两个命令,而无需两次输入该输入?
例如, stat 命令告诉了很多关于文件的信息,但没有指明它的文件类型:
stat fileName
Run Code Online (Sandbox Code Playgroud)
文件命令,告诉什么类型的文件是:
file fileName
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式在一行中执行此操作:
stat fileName ; file fileName
Run Code Online (Sandbox Code Playgroud)
但是,您必须键入文件名两次。
如何在同一个输入上执行两个命令(无需两次输入输入或输入变量)?
在 Linux 中,我知道如何通过管道传输输出,但是如何通过管道传输输入呢?
iru*_*var 33
可能会让我的指关节为此受到抨击,这里有一个 bash 大括号扩展和 eval 的黑客组合,似乎可以解决问题
eval {stat,file}" fileName;"
Run Code Online (Sandbox Code Playgroud)
Sté*_*las 29
使用zsh
,您可以使用匿名函数:
(){stat $1; file $1} filename
Run Code Online (Sandbox Code Playgroud)
使用es
lambda:
@{stat $1; file $1} filename
Run Code Online (Sandbox Code Playgroud)
你也可以这样做:
{ stat -; file -;} < filename
Run Code Online (Sandbox Code Playgroud)
(做第stat
一个file
将更新访问时间)。
我会做:
f=filename; stat "$f"; file "$f"
Run Code Online (Sandbox Code Playgroud)
不过,这就是变量的用途。
cuo*_*glm 24
这是另一种方式:
$ stat filename && file "$_"
Run Code Online (Sandbox Code Playgroud)
例子:
$ stat /usr/bin/yum && file "$_"
File: ‘/usr/bin/yum’
Size: 801 Blocks: 8 IO Block: 4096 regular file
Device: 804h/2052d Inode: 1189124 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:rpm_exec_t:s0
Access: 2014-06-11 22:55:53.783586098 +0700
Modify: 2014-05-22 16:49:35.000000000 +0700
Change: 2014-06-11 19:15:30.047017844 +0700
Birth: -
/usr/bin/yum: Python script, ASCII text executable
Run Code Online (Sandbox Code Playgroud)
这适用于bash
和zsh
。这也适用于mksh
并且dash
仅适用于交互式。在 AT&T ksh 中,这仅在 与file "$_"
另一行位于不同的行时才有效stat
。
god*_*eek 10
在我看来,所有这些答案或多或少都像是在编写脚本。对于真正不涉及脚本的解决方案,并假设您坐在键盘前输入 shell,您可以尝试:
stat somefileEnter 文件Esc_ Enter
至少在 bash、zsh 和 ksh 中,在 vi 和 emacs 模式下,按 Escape 然后下划线会将上一行的最后一个单词插入到当前行的编辑缓冲区中。
或者,您可以使用历史替换:
统计一些Enter 文件文件!$Enter
在 bash、zsh、csh、tcsh 和大多数其他 shell 中,!$
当解析当前命令行时,将替换为前一个命令行的最后一个字。
归档时间: |
|
查看次数: |
9663 次 |
最近记录: |