2015-03-02 150 views
0

奇怪的问题我正在玩Linux find命令,并且可以成功找到脚本文件,然后我希望运行它而不产生新的shell是可能的吗?使用find -exec linux命令运行二进制文件

例如:

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

这个成功运行该脚本,但我不希望产生一个新的外壳,是有可能只是运行脚本?

+1

你有没有_tried_'-exec {} \;'? “+”形式在这里不起作用,理由应该是完全明显的。也就是说,现在,你的第一个'-exec'仍然缺少一个终结符,所以第二个'-exec'运行的含义实际上只是第一个参数的一个参数。 – 2015-03-03 00:01:50

+1

这仍然会产生一个新的shell来运行脚本。你不能在* current * shell中运行脚本,因为当前的shell没有在那个时候执行......'find'是。 – 2015-03-03 00:02:49

+0

你为什么试图避免新的过程?那里的目标是什么?那里有什么必要? – 2015-03-03 00:13:49

回答

2

您的意思是您想要将您发现的脚本输入到当前shell中?如果是这样的:

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

如果你仅仅意味着要避免多个解释参与运行它们时,作为子:

find ~ -iname script.sh -exec ls -sh '{}' ';' -exec '{}' ';' 

...报价{}是没有必要的庆典,但是如果某个人的代码可能来自zsh,那么这是一种习惯。

+0

我试图找到脚本文件,然后执行它而不产生新的过程。对不起,如果这是模糊的我是新来linux和做一个教育ctf, 有效地,我可以返回并运行该文件使用-exec bash,但我认为这产生了一个新的过程来运行脚本 – 2015-03-03 00:09:05

+1

@TubbyTommy,“执行它没有产生一个新的过程“是什么来源 - 这个答案中给出的第一种方法 - 是。请注意,这意味着如果您的源脚本运行命令'exit',则不会运行其他脚本,因为'exit'会退出您的shell;但是,您可以获得所要求的内容。 – 2015-03-03 00:31:55