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

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

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

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

 source ~/bash_functions.sh 

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

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

  • Подождите, пока процесс завершит ИЛИ, чтобы пользователь нажал клавишу
  • Как функция может вызвать функцию, которую она «переопределяет»?
  • Убивание нескольких экземпляров скрипта из самого скрипта
  • Просмотреть текущее определение функции оболочки
  • Развернуть переменную в определении функции в zsh
  • Как проверить, является ли команда псевдонимом, функцией или двоичным?
  • Пожалуйста, объясните ниже функцию bash
  • Экспорт функции из .profile / .bashrc
  • как я могу использовать sudo внутри функции?
  • Как просмотреть источник «string.h» и другой исходный код библиотеки в gedit Ubuntu?
  • Как ссылаться на скрипт-локальный словарь в сопоставлении Vim?
  • Определение функции печати POSIX
  • Interesting Posts

    разрешить пользователю chroot?

    Изменение цвета и тени шрифта из заголовка в диспетчере окон

    Поиск правильного dmp tmp на нескольких платформах

    Беспроводная сеть не отображает сеть в результатах сканирования

    Пакеты OAM теряются в стеке IP ядра linux

    беспроводные капли после использования

    Объединить столбцы с одинаковым значением с awk

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

    IBM DB2 для Linux AMD64 не устанавливается на Debian Jessie, журнал установки предлагает проблему с поставляемым IBM libdb2ure.so

    Не удается выполнить ping 8.8.8.8 с маршрутизатора, но может ли он отсылать его из локальной сети?

    Отключить автоподстройку в Ubuntu 16.04

    BareOS резервируется до точки монтирования LVM вместо установленного логического тома LVM?

    Невозможно контролировать режим и работу с инъекциями на моей Wi-Fi-карте bcm43142

    Hotmail не получает письма от скрипта, но работает с сервера

    Отключить несколько файлов

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