我想用来tr做一些 rot13 转换。我可以很好地理解这个命令:
tr A-Za-z N-ZA-Mn-za-m <<< "URYC ZR CYRNFR"
Run Code Online (Sandbox Code Playgroud)
哪个输出是HELP ME PLEASE,但我不知道这个其他命令如何产生相同的 rot13 转换:
tr .............A-Z A-ZA-Z <<< "URYC ZR CYRNFR"
Run Code Online (Sandbox Code Playgroud)
所以我有两个问题:
tr命令背后的魔法是什么?这个答案说明.msi和setup.exe安装在Windows上的应用程序文件。
是否有等同.msi,并setup.exe在Debian或者ubuntu文件?做.deb包文件对应.msi或者setup.exe还是其他什么东西?
我在 Windows 上的 Ubuntu或适用于 Linux 的Windows 子系统中的另一个 Linux 发行版上使用Bash,并且我已经lxss使用 Windows 编辑器在目录中编辑了一个 Linux 文件。
现在,每当我或程序尝试从 Linux 访问它时,我都会收到错误“输入/输出错误”,或者即使我可以在文件资源管理器中看到它确实存在,该文件也会完全消失。
cat abc
cat: abc: Input/output error
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况?我能做些什么来修复它?我将来如何避免它?
在对这个问题的评论中,出现了一个案例,其中各种 sed 实现在一个相当简单的程序上存在分歧,我们(或至少我)无法确定规范实际需要什么。
问题是从已删除行开始的范围的行为:
1d;1,2d
Run Code Online (Sandbox Code Playgroud)
即使在到达该命令之前删除了范围的开头,也应该删除第 2 行吗?我最初的期望是“否”,符合 BSD sed,而 GNU sed 说“是”,检查规范文本并不能完全解决问题。
符合我的期望的是(至少) macOS 和 Solaris sed,以及 BSD sed。不同意(至少)GNU 和 Busyboxsed以及这里的许多人。前两个是 SUS 认证的,而其他的可能更广泛。哪种行为是正确的?
两个地址范围的规范文本说:
然后sed实用程序应按顺序应用其地址选择该模式空间的所有命令,直到命令开始下一个循环或退出。
和
具有两个地址的编辑命令应选择从与第一个地址匹配的第一个模式空间到与第二个地址匹配的下一个模式空间的包含范围。[...] 从所选范围之后的第一行开始,sed 将再次查找第一个地址。此后,应重复该过程。
可以说,第2行是 内,不管开始点是否已删除“从通过相匹配的第二下一图案空间匹配的第一个地址中的第一图案空间包容范围”。另一方面,我期待第一个d进入下一个周期,而不是给这个范围一个开始的机会。UNIX™ 认证的实现符合我的预期,但可能不是规范要求的。
一些说明性的实验遵循,但关键的问题是:什么应该 sed在范围上已删除的行开始呢?
这个问题的一个简化演示是这样的,它打印额外的行副本而不是删除它们:
printf 'a\nb\n' | sed -e '1d;1,2p'
Run Code Online (Sandbox Code Playgroud)
这提供sed了两行输入,a和b。该程序做了两件事:
删除第一行1d。该d命令将
删除模式空间并开始下一个循环。和
我正在寻找有关空设备的一些历史信息。为什么它被称为/dev/null而不是(例如)/dev/empty?
FreeBSD 的手册页指出“AT&T UNIX 版本 7 中出现了一个空设备”,但我找不到任何关于最初选择该名称的参考或提示。
如果事实证明该名称最初是在更古老的操作系统中使用的,我想知道原始设备的工作原理以及选择该名称的原因。
如果两个进程通过管道连接,
> cmd1 | cmd2
Run Code Online (Sandbox Code Playgroud)
有没有办法cmd1找出管道另一侧的进程的名称(或PID)(cmd2)?
此外,反之亦然,有什么方法cmd2可以获取cmd1?
我知道isatty(3)要检查输出是否到达(或输入来自)终端,所以我想知道是否有办法了解更多关于另一端的信息。
在这一行:
tr a A < /etc/hosts | sort -r |pr -d > /etc/hosts
Run Code Online (Sandbox Code Playgroud)
预期的结果是什么?我知道小写的 'a' 会变成大写的 'A' 但接下来是什么?由于重定向到相同的文件名,原始文件会被覆盖吗?
我想知道创建将在 MacOSX 中运行应用程序的 bash 脚本的最简单方法(它是基于 UNIX 的系统,所以我认为这是正确的地方)。等待程序退出。如果退出不是崩溃,请再次运行。否则,让崩溃报告窗口保持打开状态并退出。
我希望这个脚本永远运行,直到崩溃或手动终止。
我有一个模糊的想法,但不确定。这是我到目前为止所拥有的:
echo "Launching Autorun…"
if ["$1" -eq "0"]; then
# Application exited successfully. Restarting.
/path/to/application.app
else
# An error occured. Do nothing and exit.
exit
fi
Run Code Online (Sandbox Code Playgroud) 在某些情况下,我安装了实用程序/程序,但命令名称与程序名称不同。
就像我最近安装了 PostgreSQL 一样,安装后我运行了命令
postgresql
Run Code Online (Sandbox Code Playgroud)
但它给出了一个错误 bash: postgresql command not found
所以我在互联网上搜索,发现启动 postgresql 的命令是
psql
那么,我如何找出使用什么名称访问哪个实用程序/程序?
我做了,apt-cache show postgresql但即使在那里也没有提到该程序将使用命令访问psql
请不要建议locate命令。它没有帮助。
我试图找到 Linux 命令的命名约定。
对于, , 等命令cp,它似乎基于第一个和第二个最后一个字符,例如rmmv
mvlscpcd,两个单词的第一个字符,有道理而有时会忽略某些命令中的元音,这是有道理的。
另一方面,该命令mkdir并非基于先前的认知:“make directory”mkdir应该更像是md.