Linux(Mac) shell 脚本取别名 alias 使用(shell实现SSH自动登陆)

需求

有时候,需要运行一个大的 xxx.sh 脚本,或者运行一条很长的命令,不便于记忆,可以利用 alias 取别名

例子:shell实现SSH自动登陆

每次登陆自己开发机总要输入 ssh [email protected],然后再确认输入password,手快了还经常会输错。作为一个懒人,肯定要找一个取巧的方式,编写一个shell 脚本,令其自动登陆

0. 安装 expect

安装 expect

1. 完成脚本

以下是一个完成版的脚本 test.sh

注:如果注释报错的话就去掉

#!/usr/bin/expect                   # 指定shebang

set timeout 3                       # 设定超时时间为3秒
spawn ssh user_name@192.***.***.*** # fork一个子进程执行ssh命令
expect "*password*"                 # 期待匹配到 'user_name@ip_string's password:' 
send "my_password\r"                # 向命令行输入密码并回车
# send "sudo -s\r"                    # 切换到 root 权限
# send "cd /data/logs\r"              # 帮我切换到常用的工作目录
interact                            # 允许用户与命令行交互

2. 添加权限

如果运行 ./test.sh,报错

Terminal error: zsh: permission denied: ./startup.sh

则说明没有对文件添加权限

  • 执行 sudo chmod +x ./test.sh命令给shell脚本添加执行权限;
  • 将权限限制为单个访问类,可以使用:chmod u+x ./test.sh

再次运行 ./test.sh命令,一键登陆成功!

3. alias别名

脚本完成了,可是还是有些小瑕疵:

输入 ./file_name.sh 命令太长。。。
只能在脚本目录中才能执行,不然使用绝对路径输出的命令更长。
这里我们想到了linux的alias命令:

alias命令:
  • 终端命令行输入 alias ,即可看到当前所有的别名
  • alias命令使用方式为 alias alias_name="ori_command",将 alias_name 设置为 ori_command 的别名,这样我们输入执行 alias_name,就相当于执行了ori_command;

可是,我们会发现,当你关闭当前shell后,再打开一个shell窗口,再使用alias_name,系统提示command not found;

有没有能保持命令的方式呢?编辑bash_profile文件。

bash_profile文件

我们编辑bash_profile文件,此文件会在终端窗口创建的时候首先执行一次,所以可以帮我们再设置一次别名;

执行命令vim ~./bash_profile,在文件内部添加:

alias alias_name="/root_dir/../test.sh

保存后,再使用 . ~./bash_profilesource ~./bash_profile 在当前脚本执行一遍设置别名命令,完成设置;

这样,我们无论在哪个目录,只要输入alias_name命令,回车,真正的一键登陆!

zshrc 文件

如果是 mac 较新的版本,其终端为 zsh,其配置在以下文件中

vim ~/.zshrc

而后一样在文件中添加

alias alias_name="/root_dir/../test.sh

最后

source ~/.zshrc

参考:

  1. shell实现SSH自动登陆(内含 shell 简单基础 )

猜你喜欢

转载自blog.csdn.net/weixin_41888257/article/details/111370318