我发现我的bash终端有点慢,并且发现了一个建议,要检查你的$ PATH以查看是否有错误的条目。有,我修好了。但是,我想写一个快速的单行,以便人们检查他们的$ PATH。
我想出了这个(在OSx上)
echo $PATH | tr : "\n" | xargs -I {} bash -c ' if [ ! -e "{}" ] ; then echo {}; fi; '
它基本上有效,除了对于一个特定的目录,它表示它不存在,当它发生时。
我所看到的目录是一个真实的目录,它不是符号链接,我可以cd
进入它并运行ls
...
运行上面的命令,它给了我一个目录"/Users/patrickdavey/bin"
,但我可以运行stat:
stat /Users/patrickdavey/bin
16777220 7650031 drwxr-xr-x 3 patrickdavey staff 0 102 "Aug 23 22:42:29 2016" "May 24 03:03:41 2016" "May 24 03:03:41 2016" "May 24 03:03:32 2016" 4096 0 0 /Users/patrickdavey/bin
所以,它肯定存在。
如果有人能指出我上面的剧本可能出错的地方,我真的很感激! :)
代表@ john1024 -
$ cd ~/
$ pwd
/Users/patrickdavey
$ (IFS=:; find $PATH -maxdepth 0 ! -type d)
find: ~/bin: No such file or directory
$ stat ~/bin
16777220 7650031 drwxr-xr-x 4 patrickdavey staff 0 136 "Aug 24 20:39:24 2016" "Aug 24 16:34:09 2016" "Aug 24 16:34:09 2016" "May 24 02:03:32 2016" 4096 0 0 /Users/patrickdavey/bin
答案 0 :(得分:1)
注意这不会产生错误:
$ (PATH=/bin:/usr/bin:~/bin; IFS=:; find $PATH -maxdepth 0 ! -type d)
相比之下,这会生成类似于您看到的错误消息:
$ (PATH="/bin:/usr/bin:~/bin"; IFS=:; find $PATH -maxdepth 0 ! -type d)
find: ‘~/bin’: No such file or directory
问题是,在此版本中,~
在引号中。 ~/
仅表示主目录未加引号。
请注意,您仍然可以使用引号来定义PATH。他们只是不能包含~/
。例如,以下工作没有错误:
$ (PATH="/bin:/usr/bin":~/"bin"; IFS=:; find $PATH -maxdepth 0 ! -type d)
来自man bash
:
检查每个变量赋值是否为不带引号的波浪号前缀 紧接着
:
或第一个=
。在这些情况下,代字号 扩展也在进行中。因此,可以使用文件名 倾斜于PATH,MAILPATH和CDPATH以及shell的赋值 分配扩展值。 [重点补充。]
同样来自man bash
:
Tilde Expansion
如果一个单词以不带引号的波浪号(`〜')开头,则第一个未加引号的斜杠前面的所有字符(或全部) 字符,如果没有不带引号的斜杠)被认为是 波浪号前缀。如果tilde-prefix中没有任何字符 引用,代字号后面的波浪号前缀中的字符是 被视为可能的登录名。如果此登录名为null string,tilde替换为shell参数的值 家。如果未设置HOME,则执行该用户的主目录 用shell代替。否则,替换tilde-prefix 与指定登录名关联的主目录。 [强调补充]