我一直无法大声表达 linux 命令。例如:
curl -L example.com/file.txt -o "path/to/something with spaces.txt"
Run Code Online (Sandbox Code Playgroud)
我可以说“curl dash big L example dot com slash file dot txt dash small o path slash to slash something with space dot txt in引号”,但这是可以理解的模棱两可。我的意思是
curl -Lexample.com/file.txt -opath/to/"something with spaces.txt"
Run Code Online (Sandbox Code Playgroud)
...或者
curl -L example.com/file.txt -o path/to/somethingwithspaces."txt"
Run Code Online (Sandbox Code Playgroud)
......甚至这个:
"curl-Lexample.com/file.txt-opath/to/somethingwithspaces.txt"
Run Code Online (Sandbox Code Playgroud)
显然,最后一个不太可能,但我的问题仍然存在:
例如,如果我正在通过电话与某人通话,我该怎么做才能确保与我通话的人正确键入命令?是否有减少错误和混淆的方法?
我注意到在编写 shell 脚本时,人们是否在 I/O 重定向操作符后放置一个空格存在很多不一致之处。例如:
foo >bar.txt
Run Code Online (Sandbox Code Playgroud)
会起作用,但这也会起作用:
foo > bar.txt
Run Code Online (Sandbox Code Playgroud)
....甚至这个:
foo > bar.txt
Run Code Online (Sandbox Code Playgroud)
事实上,即使是 Linux 文档项目页面也令人沮丧地不一致 -在一个地方和另一个地方使用2>&1
(实际上在我的Bash终端中没有空格)> filename
!
我一直使用前者,因为后者对我来说就像 2 个不同的论点,但我想知道:两者之间有什么区别或推理吗?
是>bar.txt
比> bar.txt
什么的更便携?或者我应该在 1 种定义的情况下使用 1 种语法,而在另一种情况下使用另一种?
我知道,由于这个问题esc,如果我按然后输入:q!
,我可以退出编辑器。vim
但是,标准约定是当按下ctrl+时程序退出,这会将 a 发送到当前正在运行的进程。cSIGINT
例如,top
、tail -f
和ping
都遵循此约定。
我的问题是:为什么不vim
遵循这个既定的惯例?是有历史原因,还是另有原因?
在我看来,如果它像其他所有事情一样遵循这个标准约定,将会避免新用户的很多困惑。
(当我们这样做时,为什么会这样SIGINT
而不是SIGTERM
首先呢?)