Псевдоним Bash, который вызывает скрипт, а не определяет скрипт как функцию

В моем файле .bash_aliases определено более 150 ярлыков. Некоторые из них являются простыми командами, например:

# Opens file with default program
o () { xdg-open "$@" & disown; }

# Folder shortcuts
alias ..='cd .. && ls'

Другие вызывают сценарий, который есть у меня где-то еще на машине, например:

alias i3exit='~/.config/i3/i3exit.sh'

А другие - более крупные сценарии определяется как команда o выше, только с 30-80 строками.

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

Интуиция говорит мне, что было бы лучше иметь отдельные файлы сценариев, но у меня нет никаких аргументов для этого.

6
задан 9 June 2019 в 19:14

1 ответ

Если вы определите их в своем файле ~/.bash_aliases, который относится к Ubuntu и получает ~/.bashrc при установке Ubuntu по умолчанию, тогда да, есть издержки, так как файл будет получен каждый раз, когда вы Запустите новую интерактивную оболочку без регистрации. Так, например, каждый раз, когда вы открываете новое окно терминала. Теперь, с современными машинами, эти издержки, скорее всего, будут необнаружимыми, но это может быть проблемой для старых машин, встроенных систем или если вы начнете иметь загрузки сложных функций.

Кроме того, функции и псевдонимы, определенные таким образом, по умолчанию недоступны для сценариев. Поэтому, если вы хотите использовать одну из этих функций в своих скриптах, вам нужно явно указать .bashrc (или .bash_aliases). Если они есть в качестве внешних файлов сценариев в вашем $PATH, это не понадобится.

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

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

0
ответ дан 9 June 2019 в 19:14

Другие вопросы по тегам:

Похожие вопросы: