2015-03-02 149 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