命令中“&& bash”的用途(不是“&&”部分,而是“bash”部分)

命令中“&& bash”的用途(不是“&&”部分,而是“bash”部分)

我刚刚在网页上看到了下面的命令列表 - 它们ffmpeg在用户~/bin目录中安装了静态版本。这些命令不是脚本的一部分,用户应该将命令复制并粘贴到 shell 中。我不需要或使用这些命令,但是......

我的问题涉及第一个命令:mkdir -p ~/bin && bash

bash在命令中使用的目的是什么?当然,我知道什么&&是并且可能bash只是启动一个新的 bash 实例,但为什么有必要启动一个新的 bash 实例?或者bash,当这样使用时,还有其他目的吗?

mkdir -p ~/bin && bash
wget -qO ~/ffmpeg.tar.gz http://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz
tar xf ~/ffmpeg.tar.gz && cd && rm -rf ffmpeg-*-64bit-static/{manpages,presets,readme.txt}
cp ~/ffmpeg-*-64bit-static/* ~/bin
chmod 700 ~/bin/{ffmpeg,ffprobe,ffmpeg-10bit,qt-faststart}
cd && rm -rf ffmpeg{.tar.gz,-*-64bit-static}

答案1

有些程序要求您使用 bash shell 登录才能正常工作,这可能是使用 && bash 的原因。

仅当前一个命令正确运行时, && 运算符才能成功执行第二个命令 - 但您已经知道这一点,所以我的猜测是您尝试安装的软件需要 bash shell,而其他 shell 可能无法与给定的程序正常工作。

答案2

安装说明有些损坏。

如果发布的 shell 代码是一个 shell 脚本,那么该&& bash部分基本上是无用的,因为它会启动一个交互并停留在那里,直到用户使用-或bash退出 shell ,然后使用当前用户的 shell 恢复执行下一个命令,不管是什么。ControlDexit

但正如您所写,用户应该复制并粘贴代码。在这种情况下,如果成功,则&& bash有条件地启动,然后由该解释器执行剩余的行。到目前为止,一切都很好。bashmkdir

第一个问题是在命令mkdir失败(不太可能)的情况下会发生什么。口译员bash不是被处决但所有剩余的行,假设整个 shell 命令块已被复制/粘贴,无论如何都会被执行。此外,它们将由用户运行的任何 shell 执行,因此可能是不理解花括号扩展的 shell。引用丢失目录的所有命令也会出现错误~/bin

第二个问题是,即使在第一种情况(mkdir成功)中,命令序列也是假的,因为它假设启动命令时用户位于其主目录中,但当然,情况不一定如此。

答案3

除非目录bin之前不存在它的创建失败,打开一个交互式 bash shell,您可以在其中随心所欲地工作......编辑文件,给您的祖母写电子邮件,等等。一旦退出此 shell,脚本就会继续运行,执行 wget、tar 等操作。

现在这就是这个脚本的实际内容。不管这是否合理,我不想评判......

相关内容