bash可以将命令写入终端输入吗?

bash可以将命令写入终端输入吗?,bash,shell,sh,Bash,Shell,Sh,我有一个冗长的命令。我创建了一个bash函数,使它更容易记住 例如: phew(){ echo“这不是我的超级冗长命令” } 这一切都很棒。但是,我还不想执行该命令。我只想帮我打字 有没有办法将一串文本写入终端输入? 调整上述示例: phew(){ foo“echo‘这不是我的超级冗长命令’” } $phew#会为我写下一行 $echo“这不是我的超级冗长命令”#然后,我按enter键。生产。。。 #这不是我的冗长命令 我找到了一种方法,但这不是我真正想要的。它对环境的描述太具体了 需要App

我有一个冗长的命令。我创建了一个bash函数,使它更容易记住

例如:

phew(){
echo“这不是我的超级冗长命令”
}
这一切都很棒。但是,我还不想执行该命令。我只想帮我打字

有没有办法将一串文本写入终端输入?

调整上述示例:

phew(){
foo“echo‘这不是我的超级冗长命令’”
}
$phew#会为我写下一行
$echo“这不是我的超级冗长命令”#然后,我按enter键。生产。。。
#这不是我的冗长命令

我找到了一种方法,但这不是我真正想要的。它对环境的描述太具体了

需要AppleScript和iTerm2。 因此,它只能在mac上工作

write_noline() {
  osascript \
  -e "tell application \"iTerm2\" to tell current window to tell current session to write text \"${@}\" newline NO"
}
使用以下示例:

phew() {
  write_noline "echo 'This is not really my super long winded command'"
}

您可以将文本的其余部分作为参数

脚本:

ls "$1"
命令行:

>script '/home/me/Pictures'
请尝试以下方法之一:

  • bash
    必需:

    phew() {
      printf '%s' "Type something: "
      read c < <(echo $@)
      echo $c
    }
    
    输出:

    Type something: Tro lo lo lo LO
    
    Hit enter to run: echo 'This is not really my super long winded command'
    
  • 普通老伯恩贝壳:

    phew() {
        c="echo 'This is not really my super long winded command'"
        read -p "Hit enter to run: $c"
        $c
    }
    
    测试:

    输出:

    Type something: Tro lo lo lo LO
    
    Hit enter to run: echo 'This is not really my super long winded command'
    
    …用户点击回车键。输出:

    'This is not really my super long winded command'
    

    这可以更危险地概括为:

    phew() {
        c="$@"
        read -p "Hit enter to run: $c"
        $c
    }
    
    用户将在其中键入
    phew“echo'yadda yadda'”
    。这样更安全 只在脚本中使用这样的函数来保存程序员 编写不同版本的
    phew
    的麻烦


  • 您可以创建一个别名,然后使用
    M-C-e
    (在PC键盘上按Ctrl+Alt+e)将其展开

    alias phew="echo 'This is a very long command'"
    
    在此之后,键入
    phew
    然后键入
    M-C-e
    将在命令行上留下
    echo“这是一个很长的命令”


    注意:
    M-C-e
    将展开命令行上的所有内容,包括命令替换(反勾号),这将导致执行封闭的命令。确保这就是你想要的。有一个单独的readline函数,仅用于扩展别名;默认情况下,它不绑定到键,但您可以将其绑定到一个键。

    不,它不能馈送到终端输入。也许你可以用键盘快捷键做你想做的事情。看看bash中的
    readline
    定制功能。这可能就是我最后要做的。理想情况下,我希望动态编辑命令。添加一些额外的标志等等。这应该可以有效地满足您的需要:
    cmd=“cmd goes here”;读取-ei“$cmd”$回复
    @TNierath,谢谢。。。这很有效,让我尝试了
    bash
    shell的
    read
    命令。请看修改后的答案。实际上,
    eval$REPLY
    最后会更好。我想对于大多数用例,我更喜欢alias扩展选项,但是知道它还是很好的