1

Я был немного смущен по поводу постороннего использования функций оболочки.

Мое определение функции оболочки: функция в .bashrc такая, что

.bashrc

--- other default bash configs ----

extract() {     // I call this a shell function
   ....
}

Мое определение функции помещено в PATH: файл, папка которого находится в PATH. Например, у нас есть файл ~/bin/screen/convert.screen

Чтобы добавить файл и другие файлы в папке в мой путь, у меня может быть следующий путь

 export PATH='/Users/masi/bin/screen:' 

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

В чем преимущество пользовательской функции оболочки, которой нет в вашей переменной PATH?

3 ответа3

4

Функции оболочки легко модифицируются и поддерживаются. Вы должны добавить их в свой PATH, когда вы знаете, что они вам всегда будут нужны (даже если это будет гораздо реже), а не временным явлением. Нет необходимости загружать такой большой rc-файл, который вы добавляете, когда знаете, что в нем все время не будет необходимости. Если есть большая функция, которую вы используете реже, но она очень важна, сделайте ее доступной из вашей PATH чтобы вы могли обращаться к ней только тогда, когда вам это нужно.

1

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

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

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

1

Я использую функции оболочки для вещей, которые достаточно малы и самодостаточны, и которые являются вспомогательными командами для оболочки, а не полными программами сами по себе. Когда что-то становится подходящей программой, я записываю ее как таковую и перемещаю в каталог bin в моей папке $HOME (которая уже находится в моем PATH).

Вот пример:

# Start mpd (if necessary), search for music using mpc, play music.
mp-start()
{
    ps -C mpd > /dev/null || mpd
    mpc search any $1 | mpc add -
    mpc play
}

Это функция, а не программа. Это очень мало, и я собираюсь использовать его, только если я уже работаю в оболочке.

Я также считаю более чистым помещать все функции для моей оболочки в отдельный файл (для меня .bash_functions , но я думаю, что вы - пользователь Z-оболочки, поэтому настройте его соответствующим образом), который я получаю из основного файла моей оболочки. Последний совет - добавить что-то вроде этого в ваши псевдонимы:

alias refunction='vim ~/.bash_functions; source ~/.bash_functions'

Это позволяет вам создавать новую функцию на лету и иметь ее сразу же после завершения редактирования.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .