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

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

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

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

 source ~/bash_functions.sh 

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

  • Что делает «while test $ # -gt 0»?
  • Развернуть переменную в определении функции в zsh
  • Вызов `source` из функции bash
  • Скрипт для создания файлов в шаблоне
  • Восстановление опции в конце функции в zsh
  • Передача переменной в сценарий bash при поиске ее в другом сценарии bash?
  • Подождите, пока процесс завершит ИЛИ, чтобы пользователь нажал клавишу
  • Как вызвать функцию оболочки
  • 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

    Ошибка накопителя / проблема суперблока?

    difficalty для сохранения вывода traceroute в переменной оболочки?

    AES-NI ускорил шифрование ZFS v31 в Solaris 11

    Что делает этот expr в сценарии оболочки?

    mdadm отказывается добавлять второй идентичный диск в массив

    есть файл tempfile2.gz (проверен с помощью команды файла), но gunzip / gzip -d не работает

    Перенаправить stderr в конструкцию с двойными скобками

    Что делает недокументированный аргумент командной строки «proto» в auditdistd для FreeBSD?

    Файл lftp sftp в определенный каталог

    Обычная доступная файловая система с очень большим ограничением по размеру файла?

    Ошибки glibc сервера Redhat и Centos

    Где в исходном коде GRUB2 есть передача / переход к коду ядра?

    Правила iptables для прокси-машины squid

    Команда unetbootin и dd не работает при загрузке usb, застрявшей на черном экране с подчеркиванием

    Как извлечь несколько данных из файла и сохранить его в файле csv?

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