相关疑难解决方法(0)

`sh -c 'some shell code' sh` 中的第二个 sh 是什么?

我遇到了以下代码段:

sh -c 'some shell code' sh …
Run Code Online (Sandbox Code Playgroud)

(其中表示零个或多个附加参数)。

我知道第一个sh是命令。我知道sh -c应该执行提供的 shell 代码(即some shell code)。第二个目的是sh什么?


免责声明

类似或相关的问题有时会sh -c在答案中正确使用后作为后续问题出现,并且提问者(或其他用户)想详细了解答案的工作原理。或者它可能是“这段代码做什么?”类型的更大问题的一部分。当前问题的目的是在下面提供规范的答案。

这里涵盖的主要问题、类似或相关问题是:

  1. 什么是第二次shsh -c 'some shell code' sh …
  2. 什么是第二次bashbash -c 'some shell code' bash …
  3. 什么find-shfind . -exec sh -c 'some shell code' find-sh {} \;
  4. 如果some shell code在一个 shell 脚本中并且我们调用了./myscript foo …,那么 …

sh shell-script positional-parameter

8
推荐指数
1
解决办法
514
查看次数

如何限制与选项 -print0 一起使用的 find 命令的输出

我想限制 find 命令的输出。过去我曾经用于这个 ls 命令,例如:

ls *tgz|head -100|xargs -i mv "{}" ../
Run Code Online (Sandbox Code Playgroud)

但我知道如果文件名包含换行符,结果可能是不可预测的。所以更正确的方法是这样的:

find ... -print0 | xargs -0
Run Code Online (Sandbox Code Playgroud)

但是采用这种方法我无法使用 head 命令限制 find 的输出 - 它显示所有文件名用 ^@ 特殊符号分隔:

 find . -name '*tgz' -print0|head -2|less
Run Code Online (Sandbox Code Playgroud)

file1.tgz^@file2.tgz^@file3.tgz^@file4.tgz^@file5.tgz^@

有没有办法消除这种尴尬?

我试图在 awk 的帮助下解决它:

find . -name 'BATCHED*' -print0|awk 'BEGIN{RS=""}'
Run Code Online (Sandbox Code Playgroud)

但它仍然显示所有或零行。

可以借助awk解决吗?有更好的解决方案吗?

顺便提一句。我发现这个非常有指导意义的参考,但我的问题没有答案。

bash awk find

5
推荐指数
1
解决办法
2866
查看次数

使用通配符时,“查找”实用程序不会输出所有文件

跑步:

$find . -name *.exe
Run Code Online (Sandbox Code Playgroud)

给出:

./MakeItSo_1.2.2/MakeItSo_1.2.2/MakeItSo.exe
./MakeItSo.exe
Run Code Online (Sandbox Code Playgroud)

但这些并不是目录中唯一的 exe 文件。例如,运行

$find . -name ATLTester.exe
Run Code Online (Sandbox Code Playgroud)

给出:

./Debug/ATLDmoVexaTester.exe
Run Code Online (Sandbox Code Playgroud)

find wildcards

3
推荐指数
1
解决办法
276
查看次数

标签 统计

find ×2

awk ×1

bash ×1

positional-parameter ×1

sh ×1

shell-script ×1

wildcards ×1