将字符串打印到命令行,就像一条新命令一样

时间:2020-09-03 10:57:03

标签: linux bash command-line printing

我想为带有默认参数的长命令创建快捷方式,以便将命令带入命令行,然后自己添加或更改参数。

例如,使用命令wget

print "wget -O downloaded.file"

将导致:

user@hostname$ wget -O downloaded.file

然后添加要从中下载的“ URL”:

user@hostname$ wget -O downloaded.file http://example.com/

2 个答案:

答案 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/330217https://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 '"