找回密码
 立即注册
首页 业界区 安全 [Linux] 如何在 Linux 中自定义一条命令?

[Linux] 如何在 Linux 中自定义一条命令?

阎一禾 2025-6-9 15:31:52
0 序


  • 在Linux系统中,自定义一条命令可以通过脚本编写alias命令创建别名函数定义等方式实现。
这些方法允许用户按自己的需求创建新指令,以快速、高效地执行常用操作或复杂的命令序列。
脚本编写是一种常见且灵活的方式,通过将一系列命令写入一个文本文件并赋予执行权限,用户可以通过文件名调用这些命令,极大地提高工作效率并实现自动化任务。
1 环境变量法


  • 熟悉linux的都知道,大部分发行版都会判断用户目录下是否有bin目录,如果有就会将这个目录加入环境变量
也就是说,我们可以将一些脚本写好放到这个目录下,也就是$HOME/bin目录下,这样我们就可以在终端直接调用脚本了
上述判断bin目录是否存在的部分一般会放在$HOME/.profile,我的Linux操作系统下这部分内容如下:
  1. # ~/.profile: executed by the command interpreter for login shells.
  2. # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
  3. # exists.
  4. # see /usr/share/doc/bash/examples/startup-files for examples.
  5. # the files are located in the bash-doc package.
  6. # the default umask is set in /etc/profile; for setting the umask
  7. # for ssh logins, install and configure the libpam-umask package.
  8. #umask 022
  9. # if running bash
  10. if [ -n "$BASH_VERSION" ]; then
  11.     # include .bashrc if it exists
  12.     if [ -f "$HOME/.bashrc" ]; then
  13.     . "$HOME/.bashrc"
  14.     fi
  15. fi
  16. # 如下几行 shell 命令,不同 Linux 操作系统中情况可能不同。有可能没有这几行命令,则需要自己拷贝进来。
  17. # set PATH so it includes user's private bin if it exists
  18. if [ -d "$HOME/bin" ]; then
  19.     PATH="$HOME/bin:$PATH"
  20. fi
复制代码
当然,如果之前目录中没有bin目录,我们自己手动在$HOME目录下建立bin。
  1. mkdir -p $HOME/bin/
复制代码
创建好的shell脚本,需要赋予可执行权限。
  1. chmod +x $HOME/bin/xxx.sh
复制代码
这个时候需要我们注销后再登录才可以,或者执行source $HOME/.profile。


  • 实际案例
  1. mkdir -p $HOME/bin
  2. echo 'echo "Hello, $1!"' > $HOME/bin/hello.sh
  3. source $HOME/.profile
  4. //在任意路径下均可执行:
  5. hello.sh
复制代码
2 脚本编写


  • 在Linux中,脚本通常是一系列的命令集合,存储在一个文本文件中,这些命令按照一定顺序执行。
要创建一个脚本,首先需要确定用于编写脚本的文本编辑器,如vim或nano。
然后,在编辑器中输入需要自动化执行的命令序列。


  • 创建脚本文件: 使用文本编辑器创建一个新文件,例如 myscript.sh。sh扩展名表示这是一个shell脚本。
  • 写入命令: 在文件的开头添加#!/bin/bash,这是一个 shebang 行,指示系统使用哪个解释器来运行脚本。然后,下面写入需要执行的命令。
例如,创建一个简单的脚本greet.sh,其内容如下:
  1. #!/bin/bash
  2. echo "Hello, $USER!"
复制代码
这个脚本会输出欢迎信息,其中$USER是一个环境变量,代表当前的用户名


  • 赋予执行权限: 使用命令chmod +x greet.sh为脚本文件赋予执行权限
  • 执行脚本: 通过./greet.sh命令运行脚本。
3 ALIAS命令创建别名


  • 别名(alias)是对一条或多条命令的引用,可以让用户为复杂或长的命令序列设定简短的名字。
  • 创建临时别名: 使用alias命令创建一个别名,比如alias l='ls -lA',这条命令会创建一个别名l,以后只需输入l就可以执行ls -lA命令。


  • 创建别名 (临时)
  1. alias ll='ls -lA'
复制代码


  • 删除别名
  1. unalias [-a][别名]
  2.   -a : 删除全部的别名
  3. 如: unalias ll
复制代码

  • 持久化别名: 为了让别名在新的会话中依然有效,可以将其添加到~/.bashrc或~/.bash_profile文件中。编辑这个文件,将相同的alias命令添加进去。
  1. // 打开 .bashrc 文件
  2. vim ~/.bashrc
  3. // 在文件末尾添加alias定义
  4. alias mygpu='nvidia-smi'
  5. source ~/.bashrc
复制代码
4 函数定义


  • 在bash脚本中定义函数可以让用户创建包含多个命令的复合命令,函数比别名更加灵活,可以接受参数。
  • 定义函数: 函数的定义格式类似于其他编程语言。
例如,创建一个名为greet的函数:
  1. greet() {
  2.   echo "Hello, $1!"
  3. }
复制代码
在这个例子中,$1代表函数的第一个参数。


  • 使用函数: 函数定义后,可以在脚本的其他地方或命令行直接调用,例如greet World会输出"Hello, World!"。
建立类似fish shell的函数机制


  • fish shell中自定义指令使用函数的方式来实现的,一条自定义指令可以对应一个函数
于是我们可以借助fish shell的这种思路来在bash上实现。实现方法如下:


  • step1 建立放置函数的文件夹
我的方法是在$HOME下建立.bash_func文件夹,可使用命令 mkdir -p $HOME/.bash_func 实现。


  • step2 在$HOME/.bashrc下添加加载函数的代码
在$HOME/.bashrc后面添加以下部分:
  1. if [ -d "$HOME/.bash_func" ]
  2. then
  3.     if [[ $(ls $HOME/.bash_func | wc -c ) -gt 0 ]];then
  4.         for flist in $(ls $HOME/.bash_func)
  5.         do
  6.             . $HOME/.bash_func/$flist
  7.         done
  8.     fi
  9. fi
复制代码
这样以来,我们在~/.bash_func/下建立文件写函数,启动终端后,就能自动加载函数,之后就可以做为自定义的指令使用。
比如,我们建立t_func文件,文件内容如下:
  1. function t_func(){
  2.     echo "hello,this is a demo!"
  3. }
复制代码

  • 然后我们新打开一个终端,注意要新打开,或者你可以先把shell切换到sh,再切换到bash,使得.vimrc文件被加载,然后我们终端输入t_func可以看到效果!
  • 需要注意的是,要写成函数的形式,虽然一个文件中可以写多个函数,但是建立一个文件写一个函数一个函数就是一条自定义指令,这样方便管理!
Y 推荐文献


  • Linux alias命令 - 菜鸟教程
  • Linux unalias命令 - 菜鸟教程
X 参考文献


  • 如何在 Linux 中自定义一条命令 - PingCode
  • linux下自定义命令的几种实现方法 - 博客园 【推荐】
    本文作者:        千千寰宇   
    本文链接:         https://www.cnblogs.com/johnnyzen   
    关于博文:评论和私信会在第一时间回复,或直接私信我。   
    版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA     许可协议。转载请注明出处!
    日常交流:大数据与软件开发-QQ交流群: 774386015        【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!   

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册