shell 函数是否比 PATH 中的相同函数更好?

shell 函数是否比 PATH 中的相同函数更好?

我对 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

如果你同意更多的 公认描述shell 函数作为写在文件(脚本)中的函数,可以将其加载到 shell 中并在其他脚本和 shell 命令中使用

如果我们采用这个术语的解释,那么shell 函数使用脚本和命令中的“功能”让您的生活更轻松。

更进一步,您还可以考虑将不常用的“函数”写在单独的文件中,并将其与其他脚本一起存储。当您需要这些时,您只需来源将该脚本放入你的 shell 中。

答案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'

这使您可以动态创建新函数,并在完成编辑后立即可用。

相关内容