我正在运行 Slackware GNU/Linux 14.2,默认情况下它不会启动 X 服务器。一时兴起,我尝试startx
在screen
会话中运行并收到警告
/usr/libexec/Xorg.wrap: Only console users are allowed to run the X server
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error
Couldn't get a file descriptor referring to the console
Run Code Online (Sandbox Code Playgroud)
为什么我无法startx
从屏幕会话内部运行?哪些资源可以在“原始”控制台上访问,而在屏幕下运行的 shell 上却无法访问?
我有几个从ping -c 10 google.com
. 对于其中一些管道,每隔一段时间就会产生一行输出,就像 ping 的输出一样。对于其他人,在处理完所有输出行后,会立即发出所有输出行。我什么时候会看到第一种行为,什么时候会看到第二种行为,有什么好的规则吗?
# prints output for each line as soon as it is received
# on OS X and Linux.
ping -c 10 google.com | grep -o 'time=\S*'
# prints output for each line as soon as it is received on OS X
# but not on Linux
# (the output of ping is slightly different so it's $8 on Linux to get the time)
ping -c 10 google.com | awk '{ print …
Run Code Online (Sandbox Code Playgroud) 所以,我写了一个简单的脚本来将sh
-styleexport key=value
语句转换为csh-style
setenv key value
for docker-machine env
。
#!/bin/sh
docker-machine env | sed -e 's/export/setenv/' -e 's/=/ /' -e '$d'
echo '# eval `docker-machine env`'
Run Code Online (Sandbox Code Playgroud)
它产生以下输出
setenv DOCKER_TLS_VERIFY "1"
setenv DOCKER_HOST "tcp://<ipv4 address>:<port>"
setenv DOCKER_CERT_PATH "<HOME>/.docker/machine/machines/default"
setenv DOCKER_MACHINE_NAME "default"
# Run this command to configure your shell:
# eval `docker-machine env`
Run Code Online (Sandbox Code Playgroud)
在 my 中,.tcshrc
我已将此脚本绑定到 alias docker-machine-env-csh
。
我可以使用临时变量来获取这个脚本的输出就好了
% docker-machine-env-csh >! /tmp/csh && source /tmp/csh
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法直接eval
得到这个别名的结果
% eval `docker-machine-env-csh`
setenv: …
Run Code Online (Sandbox Code Playgroud) 我记得在 Ubuntu Linux 上的 TTY 之间切换,并且能够在活动的 X 会话(Unity/KDE/XFCE)和另一个编号的 TTY 事物/虚拟控制台上的终端之间来回切换。我希望同样的事情在 Slackware Linux 中工作,但它似乎没有,我正试图找出原因。
我在 ThinkPad 上运行 Slackware 14.2。KDE 是我的默认桌面环境(以 开头的那个startx
)。
如果我通过startx
TTY1(默认)启动 X 会话,通过TTY2 切换到 TTY2 Ctrl Alt F2
,然后切换回Alt F1
(或Ctrl Alt F1
),我看不到我的 X 会话,我看到我运行的 shell 会话startx
。我可以与 X 进程交互并挂起、中断或终止它,但是在最初从 TTY1 切换后,我无法再次“让它控制我的监视器”。
我尝试exec startx
从我的登录 shell运行而不是仅仅运行startx
,但是当切换回 TTY1 时我仍然没有看到我的 X 会话。
除了我在使用之前在 Ubuntu 中的 GUI 和控制台之间切换这一事实之外Ctrl Alt F{1,2,3,4,5,6,7}
,这个问题向我表明应该可以在包含 X 会话的虚拟控制台和其中没有 X 会话的虚拟控制台之间切换:
摘自其中一个答案: …
ls 3>&2 2>&1 1>&3-
in的构造zsh
与ksh
/bash
或更受限制的 shell 的行为方式不一致,例如dash
根本不支持移动文件描述符。它不会在标准错误时发出目录内容或抱怨无效的文件描述符编号,它不会打印任何内容。移动文件描述符是什么意思/做zsh
什么?到目前为止,我只在 OS X 上测试了各种 shell(使用通过自制软件安装的最新版本)。
首先我们设置一个临时文件夹
$ mkdir /tmp/foo
$ cd /tmp/foo
$ touch a
$ touch b
Run Code Online (Sandbox Code Playgroud)
然后我们ls 3>&2 2>&1 1>&3-
使用bash
and运行ksh
,它们都支持移动文件描述符。
$ bash -c 'ls 3>&2 2>&1 1>&3-'
a b
$ bash --version | head -n 1
GNU bash, version 4.4.5(1)-release (x86_64-apple-darwin15.6.0)
Run Code Online (Sandbox Code Playgroud)
ksh
行为相似
$ ksh -c 'ls 3>&2 2>&1 1>&3-'
a b
$ ksh --version
version …
Run Code Online (Sandbox Code Playgroud) find
以/etc
明显的方式调用时无法列出目录的内容,我不确定解释是什么。
find /etc
只是显示/etc
,即使目录中有其他文件。
$ find /etc
/etc
Run Code Online (Sandbox Code Playgroud)
还
$ find /./etc
/./etc
Run Code Online (Sandbox Code Playgroud)
并作为根
$ sudo find /etc
/etc
Run Code Online (Sandbox Code Playgroud)
但是,/etc
运行时可以看到里面的一些文件find /etc/.
$ find /etc/. | head
find: /etc/./cups/certs: Permission denied
/etc/.
/etc/./afpovertcp.cfg
/etc/./afpovertcp.cfg~orig
/etc/./aliases
Run Code Online (Sandbox Code Playgroud)
其他命令,例如ls
显示/etc
...的内容
$ ls -1 /etc | head
afpovertcp.cfg
afpovertcp.cfg~orig
aliases
aliases.db
Run Code Online (Sandbox Code Playgroud)
这是预期的行为find
吗?