逐行打印$ PATH

问题描述 投票:2回答:4

检查$ PATH变量echo $PATH的常用代码经常打印出一些冗长而繁琐的行,如:/anaconda2/bin:/anaconda2/condabin:/usr/local/Cellar/root/6.16.00/bin:~/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/opt/X11/bin 它的可读性差。有什么办法可以逐行打印所有路径而不是一行吗?像这样:

/anaconda2/bin
/anaconda2/condabin
/usr/local/Cellar/root/6.16.00/bin
~/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Library/TeX/texbin
/opt/X11/bin
shell sed path
4个回答
2
投票

使用tr

echo $PATH | tr : '\n'

1
投票

试试这段代码:

echo $PATH | sed 's|:|\
|g'

sed是一个流编辑器,它在这里做的是搜索字符':'的每个实例,并用\ newline字符替换它。 'g'是一个标志,指示查找和替换是全局的(默认是每行替换一个实例)。

您还可以在bash_profile中的函数周围包装代码:

function printpath() {
  echo $PATH | sed 's|:|\
|g'
}

所以你可以输入printpath来获得所需的输出。


0
投票

要打印出行的$ PATH变量行,可以在bash中使用for循环。一个容易实现这一点的例子是。

for EACH in $PATH; do echo $EACH; done;

0
投票

您还可以使用以下awk方法之一:

echo $PATH | awk -F':' '{for(i=1;i<=NF;i++)print $i}'

输出:

/usr/local/git/current/bin
/usr/local/bin
/usr/bin
/bin
/usr/local/sbin
/usr/sbin
/sbin
/usr/local/go/bin

:定义为字段分隔符并在行上打印所有字段的位置。如果您不介意最后是否有空行,您可以使用更简单的命令:

$ echo $PATH | awk 'BEGIN{RS=":"}1'
/usr/local/git/current/bin
/usr/local/bin
/usr/bin
/bin
/usr/local/sbin
/usr/sbin
/sbin
/usr/local/go/bin

这次您将:定义为记录分隔符,并直接打印每一行。

© www.soinside.com 2019 - 2024. All rights reserved.