小编Wal*_*alf的帖子

转义变量以用作另一个脚本的内容

这个问题不是关于如何编写正确转义​​的字符串文字。我找不到任何与如何转义变量以在脚本或其他程序中直接使用的相关问题。

我的目标是使脚本能够生成其他脚本。这是因为生成的脚本中的任务将在另一台机器上运行 0 到n次,并且生成它们的数据在运行(再次)之前可能会发生变化,因此直接通过网络执行操作将不行。

给定一个可能包含特殊字符(例如单引号)的已知变量,我需要将其写为完全转义的字符串文字,例如,foo包含的变量bar'baz应出现在生成的脚本中:

qux='bar'\''baz'
Run Code Online (Sandbox Code Playgroud)

这将通过附加"qux=$foo_esc"到其他脚本行来编写。我是这样使用 Perl 做到的:

foo_esc="'`perl -pe 's/('\'')/\\1\\\\\\1\\1/g' <<<"$foo"`'"
Run Code Online (Sandbox Code Playgroud)

但这似乎有点矫枉过正。

我单独使用 bash 没有成功。我已经尝试了这些的许多变体:

foo_esc="'${file//\'/\'\\\'\'}'"
foo_esc="'${file//\'/'\\''}'"
Run Code Online (Sandbox Code Playgroud)

但是输出中会出现额外的斜杠(当我这样做时echo "$foo"),或者它们会导致语法错误(如果从 shell 完成,则需要进一步的输入)。

bash variable-substitution variable bash-expansion

38
推荐指数
5
解决办法
9万
查看次数

Ctrl + 箭头键在 tmux 中工作

当我通过 SSH 连接到我们的服务器时,control + 箭头序列对我来说工作正常:Ctrl+V然后Ctrl+ updownright、分别left给出^[OA^[OB^[OC^[OD。在 tmux 中,我得到^[[A^[[B^[[C^[[D

\n

我通过 PuTTY 连接到 Ubuntu,但是\xe2\x80\xa6

\n
    \n
  • 我有正确的终端集(putty因为ncurses-term已安装)。所有其他组合键都在主 shell 中工作。

    \n
  • \n
  • 我正在使用正确的字符集 (UTF-8)。

    \n
  • \n
  • 我肯定会得到一个 256 色终端(我已经尝试过多次调用TERM=... tmux

    \n
  • \n
  • 我已阅读 tmux 常见问题解答,其中提到使用此配置:

    \n
     set -g terminal-overrides "xterm*:kLFT5=\\eOD:kRIT5=\\eOC:kUP5=\\eOA:kDN5=\\eOB:smkx@:rmkx@"\n
    Run Code Online (Sandbox Code Playgroud)\n
  • \n
\n

使我的配置像这样:

\n …

keyboard-shortcuts terminal tmux

8
推荐指数
1
解决办法
7779
查看次数

如何让 F1-F4 键在 tmux 中正常运行

在我的普通终端中,F1-F4键生成^[[11~^[[12~^[[13~^[[14~,但在 tmux 中我得到^[OP^[OQ^[OR^[OS. 我希望它们在 tmux 中的行为相同,这样我就不会为 tmux 中的程序绑定带来麻烦。我没有打开 PuTTY 的Xterm R6选项。

我使用putty-256colorputty 和 tmux 中的终端类型来避免其他键不匹配,但我仍然需要重新映射我的箭头键。

配置曾是:

set -g default-terminal "putty-256color"
set -g terminal-overrides "putty*:smkx@:rmkx@:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:kf1=\e[11~:kf2=\e[12~:kf3=\e[13~:kf4=\e[14~"
Run Code Online (Sandbox Code Playgroud)

我的配置的其余部分是不相关的装饰性内容。您可以看到我尝试将 4 个功能键重新映射回原来的状态,但还没有成功。

我觉得我错过了一些基本的东西,为什么我的密钥不能对于 tmux 内部和外部的每个密钥保持相同,除了前缀之外,这样这些问题就不会发生?

编辑
我的问题仍然存在,但我遗漏了一些基本的东西:指的是tmux内的default-terminal终端类型,但指的是我正在连接的术语类型,即tmux之外。(是的,我觉得自己很蠢。)terminal-overrides

我的配置现在是这样的:

set -g default-terminal "screen-256color"
set -g terminal-overrides "putty*:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:kf1=\e[11~:kf2=\e[12~:kf3=\e[13~:kf4=\e[14~:smkx@:rmkx@"
Run Code Online (Sandbox Code Playgroud)

F1-F4仍然给我^[[11~^[[12~^[[13~^[[14~tmux 外部和^[OP^[OQ^[OR^[OS内部。

terminal tmux putty

5
推荐指数
1
解决办法
3634
查看次数