如何在bash命令中自动完成或使用缩写

时间:2016-01-18 21:34:00

标签: bash vim autocomplete placeholder scp

每天我必须通过 SCP ,从我的bash终端,在Linux Debian 8上将文件传输到许多(6)AWS EC2实例。我必须手写:

i) files to transfer;  

ii) destination folder;  

iii) url to my .pem certificate;   

iv)  openning urls on the servers: ec2-user@XX.XX.XXX....

作为一个懒惰的程序员,我想使用某种缩写来减少输入,记住iii)和iv)一般都是相同的。

首先我写了一个bash脚本,它要求我传输文件和服务器上的文件夹,但是由于每次传输时都会提示输入,所以需要更多时间。相反,我可以使用箭头重复之前介绍的bash命令。

以下是我用来运行的当前命令的示例:

scp -i /pem/aws.pem file_to_upload.txt ec2-user@XX-XX-XX-XX.amazonwas.com:/var/www/html/folder/

以下字符串需要重复输入:

scp -i /pem/aws.pem
ec2-user@.....  // this is a large string of 64 characters.

我喜欢某种占位符,我只需输入要上传的文件的路径和远程文件夹。

如何自动填写或使用缩写,例如 VIM 在bash命令中插入相同的循环文本?

3 个答案:

答案 0 :(得分:1)

所有已发布的解决方案都有效,但它们真的很难看,而不是应该如何。请记住,我们仍然有~/.ssh/config

scp -i /pem/aws.pem file_to_upload.txt ec2-user@XX-XX-XX-XX.amazonwas.com:/var/www/html/folder/

将归结为

scp file_to_upload.txt am:/var/www/html/folder/

如果您设置了~/.ssh/config

Host am:
  Hostname XX-XX-XX-XX.amazonwas.com
  User ec2-user
  IdentityFile /pem/aws.pem

如果您不使用密码(或设置ControlMasterControlPersist选项 - 您的本地文件也会自动完成和远程目录 - 这甚至会很快!)。< / p>

答案 1 :(得分:0)

听起来你可以利用你的bashrc或bash_profile中的一些bash别名。

Take a look at my .bashrc file on githut

我经常需要知道我的IP地址是什么。 bash别名的一个例子是我的showip别名。

alias showip='ifconfig | grep "inet" | grep -v 127.0.0.1'

我还在ssh中为Linux创建了别名。您可以创建一个可以解决问题的bash别名。

从主机递归复制目录:

scp -r user@host:/directory/SourceFolder TargetFolder

注意:如果主机使用端口22以外的端口,您可以使用-P选项指定它:

scp -P 2222 user@host:/directory/SourceFile TargetFile

答案 2 :(得分:0)

当您使用ssh程序连接到bash终端时,请查看ssh支持的键盘映射。
其他选项,基于

redesign

了解如何使用bash历史记录

echo "This is a line I do not want to type twice"

您可以将缩写放在shell变量中

!!
^twice^two times^

您可以使用别名

no2="This is a line I do not want to type twice"
echo "${no2}"

shell变量和别名可以放在my2='echo "This is a line I do not want to type twice"' my2