我只是偶然发现CTRL+ 4 关闭stdin
从命令行读取输入的程序。
这是我 在程序阅读中键入CTRL+4或CTRL+时的样子/stdin
$ cat
wefwef
wefwef
^\Quit
$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
^\Quit
$
Run Code Online (Sandbox Code Playgroud)
我得到^\Quit
显示,然后程序关闭。这与使用^C
or相比有什么区别^D
?有什么作用^\Quit
?
编辑:发现CTRL+\做了同样的事情。
当您在 shell 中键入控制字符时,它们会使用所谓的“插入符号”显示出来。例如,Escape 以^[
插入符号表示。
我喜欢自定义我的 bash shell 以使其看起来很酷。例如,我已经改变了我的PS1
和PS2
变得彩色。我现在希望控制字符也能获得独特的外观,使它们与普通字符更容易区分。
$ # Here I type CTRL-C to abort the command.
$ blahblah^C
^^ I want these two characters to be displayed differently
Run Code Online (Sandbox Code Playgroud)
有没有办法让我的 shell 以不同的方式突出显示控制字符?
是否可以使其以粗体显示它们,或者使它们以与常规文本不同的颜色显示?
我在这里使用bash shell,但我没有标记问题,bash
因为也许有一个适用于许多不同 shell 的解决方案。
请注意,我不知道在什么级别突出显示控制字符。我一开始以为是外壳本身。现在我听说它是readline控制控制字符在像bash这样的外壳中的方式。所以这个问题现在被标记为readline
,我仍在寻找答案。
我似乎可以使用几乎任何有效字符在 unix 中创建文件名。
touch \; &&
touch \\ &&
touch \" &&
touch $'\n' &&
touch $'\t' &&
touch $'\v' &&
touch $'\23' &&
touch $'\13' &&
echo "DONE!"
Run Code Online (Sandbox Code Playgroud)
我发现唯一不起作用的字符是/
和NUL
:
touch /
touch $'\0'
Run Code Online (Sandbox Code Playgroud)
文件名中是否还有其他无效或无法使用的字符?
我正在运行一个 SSH 服务器,并且我想删除这个用户。我无法删除此用户,因为他当前正在运行一些我需要先杀死的进程。
这是我当前使用的管道,用于查找我当前使用的用户的所有进程 ID:
ps -u user | awk '{print $1;}'
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
PID
2121
2122
2124
2125
2369
2370
Run Code Online (Sandbox Code Playgroud)
我想通过管道kill -9
来杀死所有进程,这样我就可以像这样删除这个愚蠢的用户:
ps -u user | awk '{print $1;}' | sudo xargs kill -9
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为PID
标题:
kill: failed to parse argument: 'PID'
Run Code Online (Sandbox Code Playgroud)
我认为必须有一个简单的 Unix 命令来删除第一行输入。
我知道我可以使用tail
它,但我不想计算输入包含多少行来确定我想要显示多少行。
我正在寻找类似head
或tail
但反转的东西(而不是仅显示流的第一/最后部分,它显示除流的开始/结束之外的所有内容)。
我设法通过简单地| grep [[:digit:]]
在我的awk
命令之后添加来解决这个问题,但我仍在寻找一种方法来删除文件的第一行,因为我认为在其他情况下会非常有用。
我需要在bash
shell 中间接引用一个变量。
我基本上想make
通过写作来做你可以做的事情$($(var))
。
我曾尝试使用${$var}
哪个是最直接的解决方案,bash
但随后出现此错误:
bash: ${$var}: bad substitution
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我想要做的是使用迭代变量将所有参数 ( $1
, $2
, $3
, ...) 迭代到程序中,如果没有间接,我无法做到这一点。
是否可以检查用户登录的时间?或者当用户登录到 Unix/Linux 系统时?
不久前我在我的系统上以另一个用户身份登录,现在我想知道该用户已登录多长时间。
我想知道是否有一个过滤器命令来引用输入行。
所以当管道:
line number 1
line number 2
line number 3
Run Code Online (Sandbox Code Playgroud)
到它,你得到:
"line number 1"
"line number 2"
"line number 3"
Run Code Online (Sandbox Code Playgroud)
我需要这个命令来通过管道传输行以xargs
确保xargs
将其line number 1
视为一个参数而不是三个参数。我相信它还有许多其他用途。
有这样的命令吗?这叫什么?
这是我一直在思考的问题。
这个维基百科页面建议Ctrl+{Symbol}
使用{Symbol}
当用插入符号编写时的移位变体。
这表明,CTRL+\
成为^|
(而不是^\
在插入符表示法)和CTRL+4
变^$
(代替^4
)。
但这假设是美式键盘布局。这如何适用于具有不同布局的其他国家/地区的键盘布局?
我想知道是否有一种标准的方法来用 Caret 符号编写符号。当您考虑带有英语键盘使用的其他符号位置的键盘布局时,插入符号似乎没有多大意义。
我需要将按键虚拟发送到终端程序(如vi或emacs)。
我想做这样的事情:
echo -e 'iHello, world!\e' | vi
Run Code Online (Sandbox Code Playgroud)
然后使用此缓冲区打开一个vi会话:
Hello, world!
~
~
~
~
~
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为vi不通过stdin读取击键。
我收到此错误:
ex/vi: Vi's standard input and output must be a terminal
Run Code Online (Sandbox Code Playgroud)
如何将一些文本字符串发送到终端程序,就像直接在键盘上键入字符串一样?