在用户输入时将多个命令粘贴到终端停止

pLu*_*umo 3 shell terminal clipboard user-input

将一些连续的命令粘贴到终端停止使用用户输入的命令,例如:

read VAR
echo $VAR
Run Code Online (Sandbox Code Playgroud)

或者

select VAR in 1 2 3; do break; done
echo $VAR
Run Code Online (Sandbox Code Playgroud)

echo $VAR 没有被粘贴/执行。

将所有命令放在一行上虽然有效:

read VAR; echo $VAR
Run Code Online (Sandbox Code Playgroud)

但是当有更多命令跟随时,这不是首选。


为什么会出现这种情况以及如何解决?

我的用例是在服务文档中有一些重复的命令。
我当然可以编写一个脚本,但这不是我打算做的,并且在仅具有读取访问权限的系统上可能无法实现。

And*_*son 6

一种非常舒适的方式如下

只需在终端中输入以下内容:

( paste-your-multiline-script-here ) enter

详细说明

  1. 在终端中,您开始 (

    可选:按enter(仅出于格式原因)

  2. 现在您可以粘贴多行

    例如:
    echo hello
    echo world

    替代方法:您逐行键入/粘贴(用enter键完成每一个)。

  3. 最后,输入 finalizing)enter再次点击,这将执行整个粘贴/输入的行。

小工作示例(用于逐行粘贴enter

anderson@tp ~ % (
\`subsh> echo hello
\`subsh> echo world
\`subsh> )
hello
world
anderson@tp ~ % 
Run Code Online (Sandbox Code Playgroud)

小工作示例(用于粘贴整个脚本)

anderson@tp ~ % (
\`subsh> echo hello
echo world
\`subsh> )
hello
world
anderson@tp ~ %
Run Code Online (Sandbox Code Playgroud)

忽略格式的小工作示例(用于粘贴整个脚本)

anderson@tp ~ % (echo hello                                                
echo world)
hello
world
anderson@tp ~ % 
Run Code Online (Sandbox Code Playgroud)

  • 我的意思是粘贴包括`(`和`)`作品 (2认同)

Jef*_*ler 5

当您将以下两个命令粘贴到 shell 中时:

read VAR
echo $VAR
Run Code Online (Sandbox Code Playgroud)

... 第一个告诉 shell 将一行文本读入名为VAR. 您在下一行提供该值;它恰好是您认为会执行的命令。

打印VAR变量的值,你会看到:

$ printf '%s\n' "$VAR"
echo $VAR
Run Code Online (Sandbox Code Playgroud)

同样的事情发生在select菜单上。

我建议,如果您的文档/命令希望用户输入一个值,请插入对此效果的评论:

read VAR
Run Code Online (Sandbox Code Playgroud)

(用户输入一个值)

echo $VAR
Run Code Online (Sandbox Code Playgroud)