小编fin*_*oot的帖子

为什么在将脚本管道传输到 bash 时不能使用 `read` 从 `stdin` 中读取?

我不是在寻找该问题的变通方法或解决方案。我很好,它在bash. 我只是不明白为什么它不起作用。

我正在寻找为什么以下脚本不起作用的深入答案。所有以前的互联网搜索结果,包括来自 unix.stackexchange.com 的帖子,都无法真正完全清除这一点。它与read读取有关,stdin它不起作用,因为stdin已经通过管道cat喂食“采取”(?)bash

示例 bash 脚本test.sh

echo "Please say name:"
read NAME
echo "Hello $NAME"
Run Code Online (Sandbox Code Playgroud)

方法 1 调用脚本bash test.sh

$ bash test.sh
Please say name:
XYZ
Hello XYZ
$
Run Code Online (Sandbox Code Playgroud)

方法 2 通过管道运行脚本bash

$ cat test.sh | bash
Please say name:
$
Run Code Online (Sandbox Code Playgroud)

因此脚本立即返回到提示,无需等待输入甚至打印第二行。

scripting bash pipe stdin read

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

使用 fakeroot 更改权限的问题

我不明白为什么当我chmod使用fakeroot.

最初,该文件具有以下权限:

-rwxr-xr-x  a.txt*
Run Code Online (Sandbox Code Playgroud)

当我尝试使用 chmod 更改文件的权限时,它工作正常:

chmod 111 a.txt

---x--x--x  a.txt*
Run Code Online (Sandbox Code Playgroud)

当我用fakeroot它运行它时,它似乎不能正常工作。它正确设置了组和其他的权限,但不是为用户设置的。无论chmod命令中的第一个值是什么,读取和写入的权限都已设置。

fakeroot chmod 111 a.txt

-rwx--x--x  a.txt*
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

ubuntu permissions chmod fakeroot

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

错误 sh: 1: 读取: arg 计数

我只想等待用户通过按 确认消息Return。在 bash 中,我可以调用

$ read

$ 
Run Code Online (Sandbox Code Playgroud)

但是,在 sh (在我的情况下是破折号),我得到

$ read
sh: 1: read: arg count
$ 
Run Code Online (Sandbox Code Playgroud)

看来我必须提供一个论点?这种差异从何而来?

shell bash dash read

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

如何验证 Dropbear RSA 主机密钥的指纹?

当我第一次连接到 Dropbear SSH 服务器时,我收到以下消息:

me@laptop:~$ ssh me@server
The authenticity of host 'server' can't be established.
RSA key fingerprint is SHA256:NycCxoRiiSAGA7Rvlnuf1gU8pazIpXJKZ3ukdivyam8.
Are you sure you want to continue connecting (yes/no)? 
Run Code Online (Sandbox Code Playgroud)

为了确保这是正确的服务器,我想将该消息中指定的指纹与服务器的真实指纹进行比较。如何找到服务器的 RSA 主机密钥指纹?

ssh ssh-keygen dropbear fingerprint

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

为什么`~/.bash_logout`中有一个对`clear_console`的调用?

当我使用同一用户登录tty1tty2启动 X 服务器会话时tty1- 一旦我注销tty2,X 服务器会话就会tty1崩溃。

这似乎是一个已知的错误:

正如您在错误报告中所读到的,问题在于对clear_consolein的调用~/.bash_logout。如果我删除该行,一切都会正常。

我的问题:

我没有注意到任何变化。(显然,除了 X 服务器不再崩溃。)当我注销时,控制台正在被清除 - 无论我删除该行。clear_console那么,首先打电话到那里的目的是什么?

bash ubuntu xorg debian x-server

3
推荐指数
2
解决办法
3439
查看次数

如果 ssh 控制套接字已经存在,如何中止?

我在我的脚本中使用以下行:

ssh -f -N -M -S <control socket> <host>
Run Code Online (Sandbox Code Playgroud)

这意味着初始连接仅保留在后台,我可以将其用于后续调用ssh

ssh -S <control socket> <host> <command>
Run Code Online (Sandbox Code Playgroud)

但是,如果我有多个带有命令的脚本,这些脚本应该使用相同的控制套接字并将“后台”调用ssh放入所有脚本中,我将在某个时候收到以下消息:

ControlSocket <control socket> already exists, disabling multiplexing
Run Code Online (Sandbox Code Playgroud)

这对脚本的其余部分没有影响,因为显然套接字存在并且可以被后续ssh命令使用。然而,即使“后台”会话无法打开套接字,它也不会退出并保持活动状态——只是没有多路复用。

使用[ -Sssh -O check检查套接字的存在仍然会留下竞争条件的可能性。

如何执行“如果尚不存在则打开控制套接字,如果存在则退出”?

command-line scripting bash ssh shell-script

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

如何在 exec &gt;/dev/null 后打印到标准输出

在脚本中,我有一长串打印到标准输出的命令。我想隐藏所有输出。因此,我没有重定向每个命令,而是将

exec >/dev/null
Run Code Online (Sandbox Code Playgroud)

一开始。

我必须使用哪些选项来“暂时忽略”一般重定向并echo在实际打印到标准输出之间进行一次调用?

scripting shell-script echo stdout exec

3
推荐指数
2
解决办法
1429
查看次数

由于写入周期数有限,不断写入 `/proc` 或 `/sys` 中的“文件”是否会缩短我的 SSD 的使用寿命?

我的笔记本电脑有一个 SSD 驱动器,我运行一个脚本,每隔一秒写入一次/sys/class/thermal/cooling_device4/cur_state. 我不认为这会算作写入 SSD 并因此减少其剩余的写入周期数,因为procfssysfs是虚拟文件系统。

还是我忽略了一些东西,这是一个问题?

linux filesystems ssd proc files

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

历史上和今天一样,用于显示其帮助页面的命令的普遍接受的默认参数是什么或现在是什么?

当我第一次想向-h我的程序添加一个选项时,我偶然发现了一个-h已经在使用的错误:使用add_help=True,Python 会argparse自动为参数-h--help.

但是对于大多数程序来说,同时使用-hand--help来显示帮助页面不是这样的,是吗?哪些流行的命令甚至有-h缩写--help?我查看了一些命令,通常它是--human-readable或其他与帮助无关的选项的缩写。使用-h您的帮助消息不工作,lscddfdiff例如-短短的命令是我测试过,当然不是一个详尽的或代表名单,但很受欢迎的命令。

可能-h在历史上一直用作显示帮助页面的默认参数,--help后来才出现?maninfo页面从哪里进入?

-h如果这是流行的默认设置,我不想通过使用帮助页面以外的其他内容来混淆用户。但是,就个人而言,我从未使用过-h并且一直在使用--help.

linux freebsd history command historical-unix

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