2016-03-16 2 views
-1

Как добавить строку в сценарий оболочки в самом конце функции с помощью bash?Добавить строку в файл сценария оболочки

Произнесите линия, которую я хочу добавить: echo "Well Hello There"; и моя функция

function hello_there { 
    echo "Hi"; 
    echo "Whats popping?"; 

} 

Единственная константа будет название метода hello_there, а начало и конец скобки ... но мне нужно линия, чтобы пройти выше конечной скобки ... и я не знаю, сколько раз мне нужно будет это сделать ...

+0

Является ли эта функция в текстовом файле или вы пытаетесь повторно использовать функцию, уже существующую в вашей среде? Если он находится в файле, есть ли другие функции в файле? Будет ли функция всегда состоять из простых выражений 'echo'? – miken32

+0

Это в текстовом файле – Kevin

ответ

0

Я бы не пытаться динамически изменять источник сценария , Это слишком опасно. Существует несколько альтернатив. Один ближайший к вашей спецификации проблемы, вероятно, будет написать функцию, как это:

function hello_there { 
    echo "Hi"; 
    echo "Whats popping?"; 
    ${HELLO_THERE_POSTCMD:-true} 
} 

Если вы хотите изменить поведение этой функции, например, чтобы он рекурсивно удалить ваш домашний каталог, вы можете установить переменная среды

export HELLO_THERE_POSTCOMD="rm -rf $HOME" 

перед тем, как позвонить вашему сценарию.

+0

вы уверены в публикации' rm -rf $ HOME', как это? Обратите внимание: это удалит вашу домашнюю папку. – sobolevn

+0

@sobolevn: Вы не заметили, что я написал это явно: ** например, чтобы он рекурсивно удалил ваш домашний каталог .... **. Eh - и на всякий случай кто-то этого не понимал: общий подход к моему решению был серьезно воспринят (я считаю это намного лучше, чем манипуляции с исходным кодом), но конкретный пример, конечно, означал как шутка (я не знал, что в настоящее время шутки признаются, только если у них есть подходящий смайлик, прикрепленный .....). – user1934428

+0

Оцените направление, на которое отвечает этот ответ, оно не отвечает на вопрос и проблемы. – Kevin

0

Вы можете посмотреть закрытие «}» и заменить его на

printf '"Well Hello There"; \n}' 

и вставить символ новой строки после запятой, а также использовать Printf, а не эхо

+0

Извините, я забыл упомянуть, что мне нужно это в сценарии bash ... – Kevin

+0

Я мог бы использовать 'sed' для этого? что-то вроде 'TMPVAR = $ (" echo 'Well Hello There'; "); sed -i "s /}/$ TMPVAR}/g" '; '??? или является ли конечная скобка специальным символом? – Kevin

+0

Это может работать, я не думаю, что} является особым символом, но просто избегайте его, если это –

0

Вы можете регенерировать код функции следующим образом:

function hello_there { 
    echo "Hi"; 
    echo "Whats popping?"; 

} 

cmd='echo \"Well\ Hello\ There \"' 
type hello_there | tr '\n' ' ' | sed -e "s/.*nction/function/g" | sed -e "s/[(|)]//g" | sed -e "s/\}/\; $cmd\;\}/g" 
Смежные вопросы