小编Gre*_*bet的帖子

无法从屏幕会话内运行“startx”

我正在运行 Slackware GNU/Linux 14.2,默认情况下它不会启动 X 服务器。一时兴起,我尝试startxscreen会话中运行并收到警告

/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 上却无法访问?

gnu-screen x11 startx

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

立即在管道中处理来自“ping”的每一行输出

我有几个从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)

pipe

4
推荐指数
1
解决办法
2484
查看次数

tcsh 在命令替换中保留换行符 `...`

所以,我写了一个简单的脚本来将sh-styleexport key=value语句转换为csh-style setenv key valuefor 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)

tcsh command-substitution

3
推荐指数
1
解决办法
1822
查看次数

如何切换到运行 X11 作为登录 Shell 子进程的虚拟终端?

我记得在 Ubuntu Linux 上的 TTY 之间切换,并且能够在活动的 X 会话(Unity/KDE/XFCE)和另一个编号的 TTY 事物/虚拟控制台上的终端之间来回切换。我希望同样的事情在 Slackware Linux 中工作,但它似乎没有,我正试图找出原因。

我在 ThinkPad 上运行 Slackware 14.2。KDE 是我的默认桌面环境(以 开头的那个startx)。

如果我通过startxTTY1(默认)启动 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 会话的虚拟控制台之间切换:

如何在 tty 和 xorg 会话之间切换

摘自其中一个答案: …

x11 slackware virtual-consoles

3
推荐指数
1
解决办法
1692
查看次数

在 zsh 中移动文件描述符

ls 3>&2 2>&1 1>&3-in的构造zshksh/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-使用bashand运行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)

zsh file-descriptors

3
推荐指数
1
解决办法
510
查看次数

OS X:BSD `find /etc` 只打印 `/etc`

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吗?

osx find

0
推荐指数
1
解决办法
84
查看次数