连接shell命令的区别

连接shell命令的区别

我的选项卡完成(BASHdebian)显示了随后组合两个命令的不同数字。从某种程度上来说,我拥有的特权越多,我就可以执行更多的命令,例如使用sudo.

;显然,与的连接方式&&略有不同。

  • 他们之间有什么区别?
  • 为什么具有特权的用户可访问的命令的数量差异会减小root?我预计数量会增加(差异)。 (最可能/最常见的原因)
nepumuk@nepumuk:~$  
Display all 2216 possibilities? (y or n)
nepumuk@nepumuk:~$ date ; 
Display all 2214 possibilities? (y or n)
nepumuk@nepumuk:~$ date && 
Display all 2216 possibilities? (y or n)
nepumuk@nepumuk:~$ date ; sudo 
Display all 2729 possibilities? (y or n)
nepumuk@nepumuk:~$ date && sudo 
Display all 2730 possibilities? (y or n)
nepumuk@nepumuk:~$ date ; man 
Display all 8127 possibilities? (y or n)
nepumuk@nepumuk:~$ date && man 
Display all 8127 possibilities? (y or n)

编辑1:我还注意到,当我进行此查询并重新开始时,“可能性的数量”会增加一到两个(除了手册的数量,这在某种程度上是可以预见的)......

所以我做了几次,因为遇到了可重现的行为:

nepumuk@nepumuk:~$
Display all 2221 possibilities? (y or n)
nepumuk@nepumuk:~$ date ;
Display all 2221 possibilities? (y or n)
nepumuk@nepumuk:~$ date &&
Display all 2221 possibilities? (y or n)
nepumuk@nepumuk:~$ date ; sudo
Display all 2735 possibilities? (y or n)
nepumuk@nepumuk:~$ date && sudo
Display all 2735 possibilities? (y or n)

编辑2:我什至无法运行一些带有sudo“启用”的命令:

nepumuk@nepumuk:~$ sudo alias
sudo: alias: command not found

sudo因此,是否使用命令的数量(更准确地说:命令集)确实有所不同。

答案1

我相信所展示的“可能性”不一定是您可以运行的程序。例如,当您输入 时man,它可能会说您可以运行很多可能的东西man(例如man ls)。无论您是否是 root,您可以运行的命令数量都应该非常相似。如果您不是 root,您仍然可以运行相同的程序。当程序无法获取root权限时,就会报错。

至于&&和之间的区别;,很简单。&&仅当左侧命令成功完成时才会运行右侧命令。;无论左侧的命令如何完成,都将运行右侧的命令。的行为&&是由于称为短路评估

更具体地说,&&只有在以下情况下才会运行右侧的命令退出代码左侧命令的值为零。与 相对应的&&||,如果左侧的命令返回非零退出代码,则仅运行右侧的命令。

相关内容