Возможно ли исходный файл в bash, но пропустить определенные функции?

Предположим, у меня есть bash_functions.sh :

 function test(){ } function test2(){ } 

И в моем ~/.bashrc я делаю:

 source ~/bash_functions.sh 

Возможно ли, при его использовании, избежать поиска определенной функции? Я имею в виду, источник все в bash_functions.sh , кроме test ?

  • SIGINT не очищается в "$ {FUNCNAME }"
  • Использование команды break в качестве аргумента функции
  • Как передать аргумент командной строки в сценарий оболочки?
  • Преобразование цикла кода в функцию
  • Как использовать функцию bash как регулярную команду в цепочке труб?
  • Работает ли функция escaping?
  • Основная функция, которая не работает
  • Отображение комментариев использования в функциях, предназначенных для интерактивного использования
  • 4 Solutions collect form web for “Возможно ли исходный файл в bash, но пропустить определенные функции?”

    В определении функции foo () { … } , если foo является псевдонимом, он расширяется. Иногда это может быть проблемой, но здесь это помогает. Alias foo для какого-либо другого имени перед поиском файла, и вы будете определять другую функцию. В bash расширение псевдонима по умолчанию отключено в неинтерактивных оболочках, поэтому вам нужно включить его с помощью shopt -s expand_aliases .

    Если sourced.sh содержит

     foo () { echo "foo from sourced.sh" } 

    то вы используете его таким образом

     foo () { echo "old foo" } shopt -s expand_aliases # necessary in bash; just skip in ash/ksh/zsh alias foo=do_not_define_foo . sourced.sh unalias foo; unset -f do_not_define_foo foo 

    то вы получаете old foo . Обратите внимание, что исходный файл должен использовать синтаксис определения функции foo () { … } , а не function foo { … } , потому что ключевое слово function блокирует расширение псевдонима.

    Не совсем, однако, вы можете переопределить функцию test (). Последнее определение функции всегда имеет приоритет. Поэтому, если вы создадите файл с test() затем определите функцию с тем же именем, последняя функция переопределит ту, которая была получена. Я использую это, чтобы обеспечить некоторую объектно-ориентированность в некоторых моих сценариях.

    Пример:

    bash_functions.sh:

     test(){ echo "This is the test function from bash_functions." } test2(){ echo "This is the test2 function from bash_functions." } 

    scripty_scripterson.sh

     test2(){ #this is thrown in just to show what happens in #the other direction echo "This is the test2 function from scripty." } source bash_functions.sh test1(){ echo "This is the test1 function from scripty." } test1 test2 

    В командной строке:

     $ ./scripty_scripterson.sh This is the test1 function from scripty. This is the test2 function from bash_functions. 

    Вы можете создать временный файл, прочитать его и удалить его впоследствии. Чтобы удалить функцию 'test', я предполагаю, что внутри функции нет '}'.

     sed '/test()/,/}/d' testrc > ./tmprc && source ./tmprc && rm tmprc 

    Это невозможно. Вы можете разделить bash_functions.sh на 2 файла, один из которых включает то, что вы хотите использовать, а другое – те функции, которые вы не хотите использовать. и использовать третий файл сценария для их комбинирования для нормального использования.

    Interesting Posts

    Скажите mplayer, чтобы предотвратить заставку скринсейвера во время игры

    Надежно проверьте приложение электронной почты

    Есть ли журнал ошибок для процесса, который читает файл sudoers?

    получить приглашение оболочки в python

    Как настроить распределение пропускной способности между группами?

    Как отключить emacs здесь завершение документа

    Как использовать Crontab для java-файла в Linux

    Джесси, чтобы продлить обновление; прокси-сервер squid сломан

    Как выполнить команду Bash и выполнить два утверждения при сбое?

    Использование grep для нахождения строки из текстового файла

    найти n наиболее часто встречающихся слов в файле со списком стоп-слов из командной строки

    Функция daemon в /init.d не запускает программу в фоновом режиме в fedora13

    Разделение раздела во время установки

    Ошибка сетевого диспетчера – «не может отправить заявку на маршрутизатор»

    systemd: как требовать и производить установку определенной файловой системы?

    Linux и Unix - лучшая ОС в мире.