为什么:选择冒号 ( ) 作为路径分隔符?
请注意,我的意思是“路径分隔符”而不是“目录分隔符”。路径分隔符是放置在PATH环境变量中条目之间的符号。
PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:..."
^ this symbol
Run Code Online (Sandbox Code Playgroud)
计算机和软件中的一切都曾经是某人在某个地方做出的深思熟虑的决定。例如为什么波浪号代表家庭目录(以及为什么 hjkl 代表 vi 中的方向键)。我想知道这个决定的背景。
一些随机的事实:
将冒号作为路径分隔符意味着不能将名称中带有冒号的目录添加到路径中。
来自 POSIX:
由于
<colon>是此上下文中的分隔符,因此可能在 PATH 中使用的目录名称不应包含<colon>字符。
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html
似乎不可能逃脱结肠。来自 Stack Overflow 的 @Random832 检查了处理 PATH 的源代码,并没有发现任何转义机制。
我发现越来越多的工具将可执行文件放入 ~/.local/bin。我老了,对我来说 ~/bin 是我的 $HOME 中可执行文件的地方。
这种疯狂的新时尚起源于哪里?人们为什么要这样做?它有多普遍?它在任何地方正式化吗?它不在 XDG 目录规范中。
有一个相关的问题: 哪些发行版在 $PATH 中有 $HOME/.local/bin?
对另一个问题的评论指的是https://www.python.org/dev/peps/pep-0370,它在 2008 年就已经有了: Why did this program install into ~/.local/bin ... thats the first我见过这种情况发生的时间吗?
无论如何,我们是否必须全局添加路径,以便每个用户都可以在 $PATH 中获取它。我想添加 ANT 的路径,以便每个用户不需要将它添加到他的 $PATH 变量中。
我通常使用的外壳是zsh. 我有几个别名可以在某些程序中启用颜色,例如ls和grep。我还设置了我的自定义路径,以便我可以在非标准位置(例如 in ~/bin/)执行程序。
我不会将 root 的 shell 更改为zsh,但我想分享这些设置,以便 root 也可以拥有它。我发现这zsh不是采购/etc/profile。我可以在 中获取它/etc/zsh/zprofile,但我想要一些其他更“正确”的方式。
rsync -avP /home/user/.profile hpux3:/home/user/.profile
bash: rsync: command not found
Run Code Online (Sandbox Code Playgroud)
如果我对 hpux3 机器做了 ssh
rsync
version 3.1.1 protocol version 31
Copyright (C) 1996-2014 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
output truncated
Run Code Online (Sandbox Code Playgroud)
我已经设置PATH了$HOME/.profile和$HOME/.bashrc。我应该在/etc/profile文件中设置它吗?
在 C 中,运行标准实用程序(例如 ps)而不是其他的最简单方法是什么?
例如,POSIX 是否保证存在标准ps,/bin/ps或者我应该将 PATH 环境变量重置为我所获得的值confstr(_CS_PATH, pathbuf, n);,然后通过 PATH-search 运行该实用程序?
我有以下代码,它是source我的-d.shellrc
PATH="${PATH}:${HOME}/perl5/bin"
PATH="${PATH}:${HOME}/.bin"
export PATH
Run Code Online (Sandbox Code Playgroud)
但是,如果我更改其他代码然后更改source此文件,则每个源的路径都会越来越长,每次都在它们已经存在时追加。我能做些什么来防止这种情况?
为什么shebang需要路径?
错误的
#!ruby
Run Code Online (Sandbox Code Playgroud)
正确的
#!/usr/local/bin/ruby
#!/usr/bin/env ruby
Run Code Online (Sandbox Code Playgroud)
操作系统应该有关于注册命令的路径的信息,为什么它仍然期望它被给出?
我最近在我的 VMWare 8 上安装了 CentOS 5.5,我正在尝试在系统上添加一个新用户。除非我使用su -选项,否则我无法添加用户。我相信它必须在路径设置不正确的情况下做一些事情。
我更新了路径,这是它的样子
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/uone/bin:/sbin
我相信命令在 /sbin 目录中,它已经是路径的一部分。谁能告诉我我可能还缺少什么?
当我运行netstat --protocol unix或lsof -U我看到某些 unix 套接字路径前面带有 @ 符号,例如@/tmp/dbus-qj8V39Yrpa。然后当我运行时,ls -l /tmp我没有看到名为的文件dbus-qj8V39Yrpa 的。
问题是前面的@ 符号表示什么?第二个相关问题是——我在哪里可以找到文件系统上的unix 套接字文件(@/tmp/dbus-qj8V39Yrpa)?