![创建自定义脚本的最佳实践](https://linux22.com/image/1061133/%E5%88%9B%E5%BB%BA%E8%87%AA%E5%AE%9A%E4%B9%89%E8%84%9A%E6%9C%AC%E7%9A%84%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5.png)
我已经编写了一些脚本,希望只用一个单词在终端中调用它们(如其他传统的 shell 命令,,,cd
等等ls
)。
到目前为止,我发现我可以将脚本放入环境路径指向的目录之一(bin
目录)中,或者将脚本的目录添加到环境路径中。
Ubuntu 显然建议不要修改任何bashrc
文件。此外,这些bashrc
文件似乎只调用bash_aliases
,我猜这更像是别名。此外,我发现我可以更改所有用户的路径/etc/environment
或在中创建脚本/etc/profile.d
。
因此,我想知道的是,创建一个仅对一个用户和所有用户可访问的自定义命令的最佳做法是什么?(使用目录bin
或修改 PATH?如果是后者,修改哪个文件?)
答案1
因此,我想知道创建所有用户均可访问的自定义命令的最佳做法。
/usr/local/bin
. 请参阅文件系统层次标准其次是 Ubuntu/Linux。
4.9 /usr/local:本地层次结构
4.9.1 目的
/usr/local 层次结构供系统管理员在本地安装软件时使用。它需要确保在系统软件更新时不会被覆盖。它可能用于一组主机之间可共享但在 /usr 中找不到的程序和数据。
本地安装的软件必须放在 /usr/local 而不是 /usr 中,除非是为了替换或升级 /usr 中的软件而安装。
4.9.2 要求
以下目录或目录的符号链接必须位于 /usr/local 中
"/usr/local"
bin
games
include
lib
man
sbin
share
src
因此,我想知道创建仅对一个用户可访问的自定义命令的最佳做法
mkdir $HOME/bin
gedit $HOME/.bashrc
并在底部添加:
export PATH="$HOME/bin:$PATH"
如果需要,您也可以在~/.profile
和中设置它/etc/profile
(但您需要使用用户名来创建特定的路径)。
示例 .profile:
if [ -d "$HOME/bin" ] ; then
PATH="$PATH:$HOME/bin"
fi
答案2
我正在回答有关自定义命令(不仅仅是自定义脚本)的原始问题。
简单命令 - 别名
可以为单个用户(当前用户)创建一个简单命令作为别名(您在问题中提到了别名),例如
alias rm='rm -i'
使删除命令具有交互性。此操作现在有效,并且仅在当前终端窗口中有效。您可以将其保存在~/.bashrc
标准别名附近,它将在将来的所有终端窗口以及文本屏幕中激活。
请注意,您当前用户的别名不适用于 sudo(除非您也为用户 root 创建别名并将其存储在中/root/.bashrc
)。
这是一个好主意备份.bashrc
例如,在编辑之前检查文件
cd
cp -p .bashrc .bashrc.0
另请参阅此链接,将 2 个命令合并为 1 个自定义命令?
高级命令 - 函数或 shellscript
如果要调用更高级的命令,该命令由多个命令行组成和/或以复杂的方式使用参数,则可以使用
A功能,其定义如下例所示
或者像这样(仅限 bash)
function rmi { rm -i }
或更通用(当 shell 被调用为 sh 时)
rmi () { rm -i }
这样的功能像别名一样被激活,并且可以以相同的方式存储在中
~/.bashrc
。Ashell脚本,这是一个包含 bash 命令的文本文件。
如果只希望当前用户使用 shell 脚本,则可以将其存储在 中
~/bin
。mkdir ~/bin # create `~/bin`, if it is not already created.
否则,如果您希望所有用户都使用 shell 脚本,则可以将其存储在可执行程序和脚本的通用目录之一中
/usr/local/bin
(或者/usr/local/sbin
如果要使用 运行该脚本sudo
)。请仔细检查 shellscript 是否具有唯一的名称,这样您就不会与已经存在的可执行程序“竞争”(或者更糟的是,覆盖它)。