相关疑难解决方法(0)

在没有键绑定的情况下执行 readline 函数?

我只是在阅读 readline 手册页,发现了一堆我不知道的很棒的命令。但是,有几个没有默认的键绑定。有没有办法从 shell 执行未绑定的命令?

我不是在问如何在 ~/.inputrc 中绑定命令,而是如何从 shell 或 bash 脚本中“一次性”执行它。

例如,“转储变量”命令。是否有一些命令我可以提供“转储变量”作为参数来执行它?

shell bash readline inputrc

31
推荐指数
1
解决办法
2540
查看次数

将管道弯曲回原点

有人可能认为

echo foo >a
cat a | rev >a
Run Code Online (Sandbox Code Playgroud)

将离开a包含oof; 但它是空的。

  1. 为什么?
  2. 否则如何适用reva

pipe io-redirection

24
推荐指数
3
解决办法
1678
查看次数

shell 输出如何影响命令提示符后键入的文本?

我以前经历过类似的行为,但直到现在我才能重现它:影响下一个命令提示符后文本的命令的输出,准备Enter由用户编辑。

以下面的例子为例:

cat /usr/share/terminfo/a/ansi
Run Code Online (Sandbox Code Playgroud)

具有以下效果:

在此处输入图片说明

或者,复制并粘贴:

1%dP1%dM1%dB1%d@1%dS1%dL1%dD1%dC1%dT1%dA%p1%c2%{1}%-%db%p1%dd
1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m +%d;%dR;0123456789]c1%dm1%dmAX[user@untrusted ~]$ R65;1;9c
Run Code Online (Sandbox Code Playgroud)

如您所见,R65;1;9c出现在命令提示符之后,按下Enter它会将其评估为命令。

我确实记得文本不仅出现在命令行之后,而且还被再次执行的情况,可能是因为它包含换行符。

这可以被认为是错误还是预期的行为,某种不可打印字符的组合允许在下一个命令提示符之后写入?

shell bash prompt terminal

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

我如何来到这个 pty,我可以用它做什么?

似乎来自一个简单的 shell 重定向为/dev/ptmx我提供了一个新的伪终端。

$ ls /dev/pts; ls /dev/pts </dev/ptmx
0  1  2  ptmx
0  1  2  3  ptmx
Run Code Online (Sandbox Code Playgroud)

一旦拥有 fd 声明的进程/dev/ptmx退出,它就会消失,但保留它很简单:

$ PS1='<$(ls -1 "$@" /dev/pts/*|uniq -u)> $ ' \
  exec 3<>/dev/ptmx "$0" -si -- /dev/pts/*
</dev/pts/3> $ ls /dev/pts; exec 3>&-
0  1  2  3  ptmx
<> $ ls /dev/pts; exec 3<>/dev/ptmx
0  1  2  ptmx
</dev/pts/3> $ exit
Run Code Online (Sandbox Code Playgroud)

所以看起来简单的open()/dev/ptmx足以得到一个伪终端。我想这会使 shell - (或它进行重定向的进程) - pty 主端的所有者。

但是我如何分配从属端 - 或者我可以分配从属端?如果可以的话——我能用它做什么?我可以影响它的读/写/刷新时间 …

shell terminal io-redirection tty pty

6
推荐指数
1
解决办法
3703
查看次数

输出命令直接输出到命令行,非变量

我在 bash shell 上,我希望命令的输出直接出现在命令执行后出现的命令提示符中!

我设想的示例,以说明我的想法:

locate create_tables.sql|MAGIC_command
user@localhost:~# /usr/share/doc/phpmyadmin/create_tables.sql
Run Code Online (Sandbox Code Playgroud)

现在,像这样使用 comman dsubstitution

sudo $(locate create-tables.sql)
Run Code Online (Sandbox Code Playgroud)

工作但 立即执行输出,我希望能够之前编辑它。有办法吗?

bash line-editor command-substitution

5
推荐指数
2
解决办法
219
查看次数

有没有办法定义 bash readline 命令?

我找不到从bash做到这一点的方法。那么有没有办法定义一个 bash readline 快捷方式,它将在光标位置插入一个动态生成的字符串?

例如,我想插入日期:

bind '"\C-xx": my-dynamical-date'

aaa  bbb
--------
    ^ cursor is here

# After pressing "\C-xx":

aaa Sun Apr 22 22:19:00 CST 2018 bbb
------------------------------------
                                ^ cursor is here
Run Code Online (Sandbox Code Playgroud)

那么如何定义 my-dynamical-date readline 命令呢?

bash readline

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

查看kill-ring中的文本

除了反复击打之外,还有什么方法可以查看整个杀戮环吗?M-y

类似于 emacs browser-kill-ring 但用于 shell

bash readline

2
推荐指数
1
解决办法
121
查看次数