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

  • Функция Bash с `getopts` работает только при первом запуске
  • Что означает «(8)» в fsck (8)?
  • как предотвратить расширение псевдонимов `eval` до произвольного псевдонима и сохранить бесконечную защиту цикла от функции?
  • GNU autotooling, где устанавливать функции оболочки?
  • Как вы перечисляете все функции и псевдонимы в определенном скрипте?
  • что такое zsh-эквивалент экспорта bash -f
  • В чем разница между `autoload` и` autoload -U` в Zsh?
  • тире: список объявленных функций
  • Выполнение команды в выражении `if` и при успешном выполнении последующих действий
  • Зашифрованный архив труб в загрузчик
  • / bin / sh: определение функции импорта ошибок для `some-function '
  • Linux и Unix - лучшая ОС в мире.