我想为带有默认参数的长命令创建快捷方式,以便将命令带入命令行,然后自己添加或更改参数。
例如,使用命令wget
:
print "wget -O downloaded.file"
将导致:
user@hostname$ wget -O downloaded.file
然后添加要从中下载的“ URL”:
user@hostname$ wget -O downloaded.file http://example.com/
答案 0 :(得分:0)
使用
alias my_personal_wget_shortcut="wget -O downloaded.file"
其他参数随后添加:
my_personal_wget_shortcut http://example.com/
使用函数或Shell脚本,您可以将参数放在任意位置:
功能:
my_personal_wget_shortcut()
{
wget -O downloaded.file "$@"
}
脚本:
#!/bin/bash
wget -O downloaded.file "$@"
别忘了在脚本上设置x位!
答案 1 :(得分:0)
我的答案基于https://unix.stackexchange.com/a/82716/330217和https://unix.stackexchange.com/a/325220/330217的解决方案。
您也许还会从https://unix.stackexchange.com/a/391698/330217那里得到一些想法
清除bash
的方法,但需要按向上光标:
您可以使用
在“bash
”的命令历史记录中添加“伪造”命令
history -s 'some command'
(请参见https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Bash-History-Builtins)
将命令放入历史记录后,您可以按向上光标键将此命令放入命令缓冲区并根据需要进行编辑。
您当然可以使用别名作为快捷方式。
alias myalias="history -s 'wget -O downloaded.file '"
myalias
按下光标后,您将得到
wget -O downloaded.file _
注意:下划线(_
)用于显示光标位置在尾随空格之后。
更多骇人听闻的解决方案,可直接填充命令缓冲区:
writecmd () {
perl -e 'ioctl STDOUT, 0x5412, $_ for split //, do{ chomp($_ = <>); $_ }' ;
}
# Example usage
echo 'my test cmd' | writecmd
与别名结合
writecmd () {
perl -e 'ioctl STDOUT, 0x5412, $_ for split //, do{ chomp($_ = <>); $_ }' ;
}
alias myalias="echo 'wget -O downloaded.file '|writecmd"
myalias
应直接导致
wget -O downloaded.file _
注意:此解决方案的缺点是它还会将命令打印到stdout。 (我不知道是否有可能禁止这种行为。当我将stdout重定向到/dev/null
时,该命令将不再被写入命令缓冲区)
在zsh
中,您可以使用print -z
将某些内容放入命令缓冲区。
alias myalias="print -z 'wget -O downloaded.file '"