- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到的问题是通配符量词由于某种原因没有通过 xargs 传递给命令。
假设,我们有包含以下内容的文件 file1:
-l
-a
f*
我们需要通过 xargs 将参数传递给 ls。
cat file1 | xargs -n3 ls
相当于 ls -la 命令的输出,加上来自终端的
ls: cannot access f*: No such file or directory.
但文件在目录中(ls -la f*
返回合适的输出)例如,如果我们将 f* 替换为 file1,我们也会得到正确的输出。
你能解释一下,为什么会这样吗?谢谢。
添加似乎很有趣,我们如何将参数从文件 file1
通过 shell 解释器传递到 ls
命令。下面是示例:
ls `xargs -n3 < file1`
现在 shell 扩展在 ls
调用之前进行,导致与 ls -la f*
最佳答案
f*
表达式也称为 shell glob,应该由 shell 解释。您可以例如通过运行 echo f*
独立尝试。
当您从 shell 运行 ls -la f*
时,shell 会根据您的目录内容对其进行解释,并使用扩展版本调用 ls
,例如:ls -la 文件 1 文件 2 文件 3
。如果它不匹配任何文件而命令需要一个文件,您可能会让一些命令对此感到困惑。
但是当你通过 xargs
将该参数传递给 ls
时,shell 没有机会扩展它,并且 ls
感觉就像它的调用完全一样 ls -la f*
。它将 -la
识别为选项,将 f*
识别为要列出的文件名。该文件恰好不存在,因此它失败并显示您看到的错误消息。
你可以让它在更常见的文件名上失败:
$ ls non_existing_file
ls: cannot access non_existing_file: No such file or directory.
或者您可以通过实际拥有一个该名称的文件来使其成功:
$ touch 'f*'
$ xargs ls -la <<< 'f*'
-rw-rw-r-- 1 jb jb 0 2013-11-13 23:08 f*
$ rm 'f*'
请注意我必须如何使用单引号,以便 shell 在创建和删除它时不会将 f*
解释为一个 glob。
不幸的是,当它直接从 xargs
传递到 ls
时,您无法让它扩展它,因为那里没有 shell。
关于bash - 为什么量词不通过 xargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19965302/
据我了解,Linux 中的 xargs 命令可用于获取一个命令的输出并将其作为另一个命令的输入传递。但是,我注意到将 xargs 作为参数传递给自身会执行以前简单的输出,如果它在没有参数的情况下被调用
如何让 xargs 对给定的每一行输入精确执行一次命令?它的默认行为是对行进行分块并执行一次命令,将多行传递给每个实例。 From http://en.wikipedia.org/wiki/Xargs
我正在使用 xargs 尝试回显文件名,后跟其内容。这是命令 find output/ -type f | xargs -I {} sh -c "echo {} ; cat {}" 但是由于某种原因,
xargs 擅长插入初始参数: seq 0 10 | xargs -n 3 echo foo 产生这个输出: foo 0 1 2 foo 3 4 5 foo 6 7 8 foo 9 10 当我还想要尾
为什么 找到 . -名称“*.xml” | xargs grep FOO 返回与文件名的匹配,而 find 。 -名称“*.xml” | xargs -i -sh -c "grep FOO {}" 不
每 xargs --help: -L, --max-lines=MAX-LINES use at most MAX-LINES non-blank input lines per command li
我有以下 3 个命令(每个都包含 xargs 和并行进程),我想将它们一起并行运行。 1. ls filenames_for_bld*_all | xargs -i bash -c 'calculat
我刚发现两个命令之间的区别: echo sum.txt| xargs cat 这会输出sum.txt的内容 echo sum.txt| xargs -0 cat 这显示错误: cat: sum.txt
考虑以下几点: $ echo index.html* | xargs -L 1 ls -l -rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:18 index.h
我想做类似的事情: find . -type f | xargs cp dest_dir 但是xargs将dest_dir用作初始参数,而不是最终参数。我想知道: 是否可以为xargs指定最终参数?
zgrep -i XXX XXX | grep -o "RID=[0-9|A-Z]*" | uniq | cut -d "=" -f2 | xargs -0 -I string echo
简而言之,这是我的问题 $ echo 'for i in $@; do echo arg: $i; done; echo DONE' > /tmp/test.sh $ echo "ac\nbc\ncc
我正在尝试将一些 .flac 文件转换为 .mp3,以便将其导入 iTunes。我尝试使用 find、xargs 和 ffmpeg,但 xargs 给我一个未终止的引号错误(因为我的文件名中有引号)。
我正在尝试设置一个脚本,以根据 transmission-remote 的输出自动删除 .torrent 文件。 transmission-remote http://localhost/transm
我想了解Rampion's code中xargs man的使用: screen -t man /bin/sh -c 'xargs man || read' 感谢 Rampion:我们不需要猫! 为什么
我遇到的问题是通配符量词由于某种原因没有通过 xargs 传递给命令。 假设,我们有包含以下内容的文件 file1: -l -a f* 我们需要通过 xargs 将参数传递给 ls。 cat file
我正在尝试处理位于磁盘上许多不同位置的 DVD 文件。它们的共同点是它们(每组输入文件)都位于名为 VIDEO_TS 的目录中。每种情况下的输出都是一个以该目录的父目录命名的文件。 我知道我可以获得每
我有一个 xargs 命令: xargs -a es_doc_positions.txt -P 64 -I {} populate_es_index.py --start {} --end {} 是否
我有一个 C 程序,它通过 i2c 连续读取加速度计数据。每当平板电脑的方向发生变化时,它都会向标准输出输出一个新行。 现在,我希望能够在 bash 脚本中使用该输出来更改屏幕的旋转。 现在,问题是这
我知道我可以使用 xargs 获取文件列表并为每个文件运行一次命令。 我想做的是将文件列表作为单个参数列表传递给命令。例如: ls |尾部-10 输出 a b c d 但我想将它传递给一个命令,它将接
我是一名优秀的程序员,十分优秀!