使用find-execlinux命令运行二进制文件

使用find-execlinux命令运行二进制文件,linux,bash,terminal,find,Linux,Bash,Terminal,Find,奇怪的问题是,我正在使用LinuxFind命令,并且可以成功地找到一个脚本文件,然后我想在不生成新shell的情况下运行它,这可能吗 例如: $ find ~ iname script.sh -exec ls -s {} -exec bash {} + 这将成功运行脚本,但我不想生成新的shell,是否可以只运行脚本?您的意思是要将找到的脚本源代码放到当前shell中?如果是: while IFS= read -r -d '' scriptname; do printf '%s\n' "$

奇怪的问题是,我正在使用LinuxFind命令,并且可以成功地找到一个脚本文件,然后我想在不生成新shell的情况下运行它,这可能吗

例如:

$ find ~ iname script.sh -exec ls -s {} -exec bash {} +

这将成功运行脚本,但我不想生成新的shell,是否可以只运行脚本?

您的意思是要将找到的脚本源代码放到当前shell中?如果是:

while IFS= read -r -d '' scriptname; do
  printf '%s\n' "$scriptname" >&2
  source "$scriptname"
done < <(find ~ -iname script.sh -print0)

…bash不需要引用
{}
,但是如果一个人的代码可以从zsh使用,这是一种习惯。

你试过
-exec{}?由于显而易见的原因,
+
表单在这里不起作用。这就是说,现在,您的第一个
-exec
仍然缺少一个终止符,因此第二个
-exec
运行的意思实际上只是第一个的一个参数。这仍然会生成一个新的shell来运行脚本。无法在当前shell中运行脚本,因为当前shell此时未执行<代码>查找
是。您为什么试图避免新流程?那里的目标是什么?这有什么必要?我正在尝试查找脚本文件,然后在不产生新进程的情况下执行它。抱歉,如果这是含糊不清的,我是linux新手,正在做一个教育性的ctf,实际上我可以使用-exec bash返回并运行文件,但我认为这会产生一个新的进程来运行script@TubbyTommy,“在不产生新流程的情况下执行它”是外包它(本答案中给出的第一种方法)的作用。请注意,这意味着如果源代码中的任何脚本运行命令
exit
,则不会再运行其他脚本,因为
exit
将退出shell。。。但是,好吧,你得到了你想要的。
find ~ -iname script.sh -exec ls -sh '{}' ';' -exec '{}' ';'