Bash 如何从shell中的命令获取输出的第二个字?

Bash 如何从shell中的命令获取输出的第二个字?,bash,shell,sh,Bash,Shell,Sh,嗨,我正在尝试制作一个shell脚本 sudo usermod-s$(其中-b zsh)$(whoami) $(其中是-b zsh)在zsh:command not found zsh: 出现此错误的原因似乎是whereis-bzsh的输出是zsh:/usr/bin/zsh/usr/lib/x86_64-linux-gnu/zsh/bin/zsh/etc/zsh/usr/share/zsh/home/linuxbrew/.linuxbrew/bin/zsh 现在我想使用脚本的/usr/bin/

嗨,我正在尝试制作一个shell脚本

sudo usermod-s$(其中-b zsh)$(whoami)
$(其中是-b zsh)
zsh:command not found zsh:

出现此错误的原因似乎是
whereis-bzsh
的输出是
zsh:/usr/bin/zsh/usr/lib/x86_64-linux-gnu/zsh/bin/zsh/etc/zsh/usr/share/zsh/home/linuxbrew/.linuxbrew/bin/zsh

现在我想使用脚本的
/usr/bin/zsh
作为输出。有没有办法从whereis-b zsh的输出中获取第二个单词

脚本应该是什么样子才能得到我需要的?
shell脚本比我想象的要难。提前谢谢大家

您可以执行以下操作:

whereis-bzsh | awk'{print$2}'

您可以执行以下操作:

whereis-bzsh | awk'{print$2}'

最好在扩展命令周围添加引号

sudo usermod-s“$(其中是zsh | cut-d'-f2)”“$(whoami)”
另一种方法是从
$PATH
获取
zsh

sudo usermod-s“$(命令-v zsh)”“$(id-un)”

最好在扩展命令周围添加引号

sudo usermod-s“$(其中是zsh | cut-d'-f2)”“$(whoami)”
另一种方法是从
$PATH
获取
zsh

sudo usermod-s“$(命令-v zsh)”“$(id-un)”

如果在bash下运行:

使用
类型
,而不是解析whereis的输出:

sudo usermod -s "$(type -P zsh)" "$(whoami)"
如果要搜索的程序不在路径中,请不要忘记
type-p
会生成一个空字符串

如果不是bash,还可以执行

sudo usermod -s "$(which zsh)" "$(whoami)"
请注意,
如果找不到程序,它会发出错误消息,因此如果在这种情况下需要空输出,则必须丢弃stderr


更新:考虑到这一点,我认为一个更好的解决方案是Lea Gris建议的:
命令-v
在bash和POSIX Shell上可用,如果找不到文件,则会产生空输出。

如果在bash下运行它:

使用
类型
,而不是解析whereis的输出:

sudo usermod -s "$(type -P zsh)" "$(whoami)"
如果要搜索的程序不在路径中,请不要忘记
type-p
会生成一个空字符串

如果不是bash,还可以执行

sudo usermod -s "$(which zsh)" "$(whoami)"
请注意,
如果找不到程序,它会发出错误消息,因此如果在这种情况下需要空输出,则必须丢弃stderr


更新:考虑到这一点,我认为更好的解决方案是Lea Gris建议的:
命令-v
在bash和POSIX Shell上可用,如果找不到文件,则会产生空输出。

此处不需要引号。是Zsh!对不起,我弄错了。正如切普纳已经向我指出的,这不是由zsh经营的,所以你是对的:报价是非常明智的。使用
命令
是个好主意。这很有效!!@user1934428的建议也是如此。我还不习惯shell脚本。。。还有很长的路要走。谢谢大家!!这里不需要引号。是Zsh!对不起,我弄错了。正如切普纳已经向我指出的,这不是由zsh经营的,所以你是对的:报价是非常明智的。使用
命令
是个好主意。这很有效!!@user1934428的建议也是如此。我还不习惯shell脚本。。。还有很长的路要走。谢谢大家
从何处
是内置的
zsh
;现在还不清楚(对我来说),脚本是用
zsh
执行的,只是试图找到
zsh
@chepner:Fixed(我希望是这样)。请检查。
从哪里
是内置的
zsh
;现在还不清楚(对我来说),脚本是用
zsh
执行的,只是试图找到
zsh
@chepner:Fixed(我希望是这样)。请查收。