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)
但是当有更多命令跟随时,这不是首选。
为什么会出现这种情况以及如何解决?
我的用例是在服务文档中有一些重复的命令。
我当然可以编写一个脚本,但这不是我打算做的,并且在仅具有读取访问权限的系统上可能无法实现。
一种非常舒适的方式如下:
只需在终端中输入以下内容:
( paste-your-multiline-script-here ) enter
详细说明:
在终端中,您开始 (
可选:按enter(仅出于格式原因)
现在您可以粘贴多行
例如:
echo hello
echo world
替代方法:您逐行键入/粘贴(用enter键完成每一个)。
最后,输入 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)
当您将以下两个命令粘贴到 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)