我正在谈论这个:
$ readlink <(echo test)
pipe:[80076194]
Run Code Online (Sandbox Code Playgroud)
是pipe:[80076194]目标的路径还是只是表明文件描述符已连接到管道并且不存在于文件系统中?我问的主要原因是因为php有人试图取消引用它:
$ strace -f php -r 'var_dump(file_get_contents($_SERVER["argv"][1]));' -- <(echo test)
...
[pid 654] lstat("/dev/fd/63", {st_mode=S_IFLNK|0500, st_size=64, ...}) = 0
[pid 654] readlink("/dev/fd/63", "pipe:[80095114]", 4096) = 15
[pid 654] lstat("/dev/fd/pipe:[80095114]", 0x7fff9c3628a0) = -1 ENOENT (No such file or directory)
[pid 654] lstat("/dev/fd", {st_mode=S_IFLNK|0777, st_size=13, ...}) = 0
[pid 654] readlink("/dev/fd", "/proc/self/fd"..., 4096) = 13
[pid 654] lstat("/proc/self/fd", {st_mode=S_IFDIR|0500, st_size=0, ...}) = 0
[pid 654] lstat("/proc/self", {st_mode=S_IFLNK|0777, st_size=64, ...}) = 0
[pid …Run Code Online (Sandbox Code Playgroud) 考虑以下范围:1,/pattern/. 如果模式在第一行匹配,则整个文件的范围匹配:
$ cat 1.sh
#!/usr/bin/env bash
set -eu
seq 1 4 | sed -rn '1,/'"$1"'/p'
$ ./1.sh 1
1
2
3
4
$ ./1.sh 2
1
2
Run Code Online (Sandbox Code Playgroud)
你会怎么做?
UPD这是我所做的(以防万一):
re='/1/'
seq 1 4 | sed -rn "1{$re{p;q}}; 1,${re}p"
Run Code Online (Sandbox Code Playgroud)
或者这样:
seq 1 4 | sed -rn "1{/1/{p;q}}; 1,//p"
Run Code Online (Sandbox Code Playgroud) 我正在尝试php-5.3在 Arch Linux上安装,但bison太新了,所以我bison从源代码构建了旧版本。并且它似乎/usr/local默认安装到其中。(这是某种约定吗?)所以我现在想知道我是否可以安装多个版本的bisonie,与默认系统一个版本和我刚刚安装的一个版本并排安装。这类东西可能很少需要。我只是对它很好奇。这是一件很难的事吗?我该怎么办?
jabber我的计算机 ( pidgin) 和手机 ( im+)上都有客户端。现在,每条消息都被其中的任意一个接收(或者看起来如此)。例如,如果一个人一个接一个地发送两条消息,一个可以进入一个客户端,第二个可以进入另一个客户端。是什么让某个特定客户端接收到消息?有没有办法让一个特定的客户端接收消息?所有的客户?
最近我一直在浏览互联网上的内容gpg。我必须说这很令人困惑。
特别是导入/导出部分。生成密钥时,默认情况下基本上会获得 4 个密钥。导出密钥的可能方法有哪些(只有一个密钥,一次有多个密钥)?删除键的可能方法有哪些(相同)?另外,我现在不确定,如果我解释gpg --list-keys,gpg --list-secret-keys结果是否正确。例如,我似乎只导出一个键(子键,gpg --export SUB_ID!),但在导入时我也得到了主键。
这是我使用的测试脚本:
last_reboot=$(last reboot | grep 'still running' | awk '{for (i=5; i<=NF; i++) printf $i FS}' | awk '{for (i=1; i<=NF - 2; i++) printf $i FS}')
if [ "$last_reboot" ]; then
date -d "$last_reboot" '+last reboot: %Y-%m-%d'
fi
days=$(uptime | awk '{print $3}')
hours=$(uptime | awk '{print $5}' | sed -E 's/,$//')
h=$(echo "$hours" | cut -d: -f 1)
m=$(echo "$hours" | cut -d: -f 2)
date -d "- $days days - $h hours - $m minutes" '+uptime: %Y-%m-%d' …Run Code Online (Sandbox Code Playgroud) $ type 1.sh
#!/bin/bash -eu
php <(echo 12)
$ ./1.sh
2
$ type 2.sh
#!/bin/bash -eu
cat <(echo 12)
$ ./2.sh
12
$ type 3.sh
#!/bin/bash -eu
echo 12 | php
$ ./3.sh
12
$ type 4.sh
#!/bin/bash -eu
rm -f named_pipe
mknod named_pipe p
echo 12 > named_pipe
$ ./4.sh
$ php named_pipe # from another window
2
Run Code Online (Sandbox Code Playgroud)
我在Debian( php-5.4.14, bash-4.1.5) 和Arch Linux( php-5.4.12, bash-4.2.42)上测试了它。
xterm:
$ echo $TERM
xterm-256color
$ stty -a
speed 38400 baud; rows 52; columns 91; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk …Run Code Online (Sandbox Code Playgroud) 我想做:
1.sh:
#!/usr/bin/env bash
set -eu
r=0
a=$(./2.sh || r=$?)
echo "$a"
echo "$r"
Run Code Online (Sandbox Code Playgroud)
2.sh:
#!/usr/bin/env bash
echo output
exit 2
Run Code Online (Sandbox Code Playgroud)
但它输出:
$ ./1.sh
output
0 # I'd like to have `2` here
Run Code Online (Sandbox Code Playgroud)
因为$(...)运行一个单独的shell。那么,我如何同时捕获退出代码和输出?
#!/usr/bin/env bash
set -e
shopt -s inherit_errexit
a=$(cat no-such-file)
echo survived
Run Code Online (Sandbox Code Playgroud)
$ /tmp/a.sh
cat: no-such-file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
#!/usr/bin/env bash
set -e
shopt -s inherit_errexit
echo -n $(cat no-such-file)
echo survived
Run Code Online (Sandbox Code Playgroud)
$ /tmp/a.sh
cat: no-such-file: No such file or directory
survived
Run Code Online (Sandbox Code Playgroud)
#!/usr/bin/env bash
set -e
shopt -s inherit_errexit
f() { :; }
f $(cat no-such-file)
echo survived
Run Code Online (Sandbox Code Playgroud)
$ /tmp/a.sh
cat: no-such-file: No such file or directory
survived
Run Code Online (Sandbox Code Playgroud)
还有其他案例吗?或者一些概括?
我正在尝试按照此指南xubuntu在 USB 闪存驱动器上安装。我正在运行的命令是
qemu-system-x86_64 -drive file=/dev/sdc,media=disk,index=0,format=raw -cdrom ./xubuntu-15.10-desktop-amd64.iso -boot menu=on
Run Code Online (Sandbox Code Playgroud)
/dev/sdc我的 USB 驱动器格式化为ext4. 它开始从 启动xubuntu*.iso,我可以看到这个屏幕

但后来我遇到了内核恐慌
不过,我能够使用 启动此映像virtualbox。它要挂载哪个分区?这一定和没有关系/dev/sdc吧?我究竟做错了什么?有什么线索吗?
动态链接器可以通过运行一些动态链接程序或共享对象来间接运行(在这种情况下,不能将命令行选项传递给动态链接器,在 ELF 情况下,动态链接器存储在 .interp程序的一部分被执行)或直接通过运行:
/lib/ld-linux.so.* [选项] [程序 [参数]]
https://jlk.fjfi.cvut.cz/arch/manpages/man/core/man-pages/ld.so.8.en
类似的信息可以在Program Library HOWTO 中找到。
但是当我尝试时,
$ LD_DEBUG=libs /usr/lib/ld-linux.so.2 ls
23325: find library=ls [0]; searching
23325: search cache=/etc/ld.so.cache
23325:
ls: error while loading shared libraries: ls: cannot open shared object file
$ LD_DEBUG=libs ls
23503: find library=libcap.so.2 [0]; searching
23503: search cache=/etc/ld.so.cache
23503: trying file=/usr/lib/libcap.so.2
...
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?有没有办法ld-linux.so直接使用来运行程序?