我对 shell 函数的额外使用感到有些困惑。
我对 shell 函数的定义:.bashrc 中的一个函数,
.bashrc
--- other default bash configs ----
extract() { // I call this a shell function
....
}
我对放入 PATH 的函数的定义:位于 PATH 文件夹中的文件。例如,我们有文件 ~/bin/screen/convert.screen
要将该文件和文件夹中的其他文件添加到我的 PATH,我可以使用以下 PATH
export PATH='/Users/masi/bin/screen:'
我想知道什么时候应该把该函数作为登录 shell 函数,什么时候应该把它添加到 PATH 中。目前我更喜欢后者,因为前者会增加维护成本。
用户编写的 shell 函数具有 PATH 中的函数所不具备的哪个优点?
答案1
Shell 函数易于修改和维护。当你知道你总是需要它们(即使频率要低得多)时,你应该将它们添加到你的 PATH 中,而不是临时添加。当你知道你不会一直需要其中的所有内容时,没有必要加载如此大的 rc 文件并不断添加。如果有一个你不经常使用但非常重要的大型函数,请将其设置为可从你的目录中访问,PATH
以便你仅在需要时才能访问它。
答案2
答案3
我使用 shell 函数来处理那些相当小且自足的东西,它们是 shell 的辅助命令,而不是完整的程序。一旦某个东西变成了一个合适的程序,我就会把它写成这样,然后把它移到垃圾桶我的文件夹中的目录$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
}
那是一个函数,而不是程序。它的功能很少,而且我只会在已经在 shell 中工作时才使用它。
我还发现把 shell 的所有函数放到一个单独的文件中会更简洁 (.bash_函数对我来说,但我认为您是 Z shell 用户,因此请进行相应调整),我从 shell 的主 rc 文件中获取此信息。最后一个提示是将类似以下内容添加到您的别名中:
alias refunction='vim ~/.bash_functions; source ~/.bash_functions'
这使您可以动态创建新函数,并在完成编辑后立即可用。