2015-03-02 2 views
0

Нечетный вопрос Я играю с командой поиска Linux и могу успешно найти файл сценария, и тогда я хочу запустить его, не создавая новую оболочку, что это возможно?Запуск двоичного кода с помощью команды find -exec linux

пример:

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

это успешно запускает скрипт, но я не хочу, чтобы породить новую оболочку, можно просто запустить скрипт?

+1

Вы _tried_ '-exec {} \;'? Форма '+' не будет работать здесь по причинам, которые должны быть полностью очевидны. Тем не менее, прямо сейчас ваш первый '-exec' по-прежнему не имеет терминатора, поэтому то, что вы подразумеваете под управлением второго' -exec', на самом деле является просто аргументом для первого. –

+1

Это все равно собирается создать новую оболочку для запуска скрипта. Вы не можете запустить скрипт в * текущей * оболочке, так как текущая оболочка не выполняет в этой точке ... 'find' is. –

+0

Почему вы пытаетесь избежать нового процесса? Какова цель? В чем же необходимость? –

ответ

2

Вы хотите, чтобы вы отправили сценарии в текущую оболочку? Если это так:

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, но я думаю, что это порождает новый процесс для запуска скрипта –

+1

@TubbyTommy, «выполнение этого без появления нового процесса "- это то, что его источник - первый подход, данный в этом ответе - делает. Обратите внимание, что это означает, что если какой-либо скрипт, который вы используете, запускает команду 'exit', дальнейшие скрипты не запускаются, потому что этот' exit' выходит из вашей оболочки ... но, ну, вы получаете то, о чем просите. –

Смежные вопросы