Bash 如何从shell中的命令获取输出的第二个字?
嗨,我正在尝试制作一个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/
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(我希望是这样)。请查收。