我正在尝试通过从中提取数据/dev/random然后使用 GPG 对其进行加密来生成密钥来锁定我的驱动器(使用 DM-Crypt 和 LUKS)。
在我使用的指南中,它建议使用以下命令:
dd if=/dev/random count=1 | gpg --symmetric -a >./[drive]_key.gpg
Run Code Online (Sandbox Code Playgroud)
如果您在没有管道的情况下执行此操作,并为其提供一个文件,它会弹出一个 (n?)curses 提示,让您输入密码。但是,当我输入数据时,它会重复以下消息四次并冻结在那里:
pinentry-curses: no LC_CTYPE known assuming UTF-8
Run Code Online (Sandbox Code Playgroud)
它还说can't connect to '/root/.gnupg/S.gpg-agent': File or directory doesn't exist,但是我假设这与它没有任何关系,因为即使输入来自文件它也会显示出来。
所以我想我的问题归结为:有没有办法强制 gpg 从命令行接受密码,或者以其他方式让它工作,或者我是否必须将数据写入/dev/random临时文件,然后加密那个文件?(据我所知,这应该没问题,因为我在 LiveCD 上执行此操作并且尚未创建交换,因此应该无法将其写入磁盘。)
我有一个使用nohup program &. 该程序接受来自 的输入STDIN。有没有办法将文本发送到STDIN正在运行的程序的nohup?
这是在运行 bash 的 FreeBSD 上。我也想看看这是如何在 linux 上完成的。
我的问题是,我想要一个从管道读取内容的脚本,检查它是否为空,如果不是则输出它,如下所示:
#!/bin/bash
var=$(cat -)
if [ -n "$var" ]
then
echo "$var"
else
echo "Pipe was empty"
fi
Run Code Online (Sandbox Code Playgroud)
问题是,如果管道为空,则 cat 从 stdin 读取。有什么办法可以防止猫这样做吗?或者 cat 是在这里使用的错误工具?
有没有一种简单的方法来截断管道中的文件?具体来说,我想在将文件送入另一个进程之前切掉文件的最后四个字节。
理想情况下,我可以这样写:
cat input.txt | some-process | truncate --size=-4 | another-process > output.txt
但似乎该truncate命令仅在磁盘上的文件上“就地”操作。
我可以使用以下内容找到文件列表:
find /path/to/files -type f
我可以使用以下任一方法清除单个文件的内容:
> filename
echo -n > filename
cat /dev/null > filename
您可以使用不涉及输出重定向的命令执行类似操作:
find /path/to/files -type f -exec file '{}' \;
但是,这不起作用:
find /path/to/files -type f -exec echo -n > '{}' \;
我似乎无法使用 find 构造命令-exec或| xargs将文件列表通过管道传输到这些将清除文件的命令之一。我怎样才能做到这一点?
我有一个 SHELL 脚本,它使用管道来分隔我的两个命令:
ssh -oBatchMode=yes user@hostname "mysql -u yop -pyop -c yop | echo test"
Run Code Online (Sandbox Code Playgroud)
问题是即使我与 MySQL 的连接不起作用,它也会执行echo test. 如果前一个命令不起作用,我想禁止我的脚本执行任何命令。
我使用搜索解决方案,if但我想不出任何东西。
如何直接从 shell 将数字列表通过管道传输到命令中?例如这样的事情
[1,2,3,4] | sort
Run Code Online (Sandbox Code Playgroud)
会给
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
编辑:
回应到目前为止友好发布的答案。. . 我问这个,因为我想快速测试和调试一个控制台应用程序,该应用程序在输入时需要输入许多数字,而不必键入许多单独的值,然后回车。我只想输入“one liner”,然后不时点击向上箭头,然后重播命令。理想情况下,我希望在不使用包含值的文本文件的情况下执行此操作(这显然是最简单的方法。)
我遇到了以下问题。
我在.bashrc(和.bash_profile)中定义了一个别名:
alias echo2="echo"
Run Code Online (Sandbox Code Playgroud)
这很有效:
$ echo2 "test"
test
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试在重定向后使用它,则它不起作用:
ls | awk '{print "echo2 "$1}' | bash
bash: line 1: echo2: command not found
bash: line 2: echo2: command not found
...
Run Code Online (Sandbox Code Playgroud)
有人知道为什么吗?我怎样才能让它工作?
我有数百个输出文件,其中一些包含错误消息。假设我想自动将包含字符串“ERROR_1”的所有文件放在“subfolder_1”中,其余文件放在第二个“subfolder_2”中。这应该可以通过管道 grep 以某种方式实现。什么是有用的语法?