【发布时间】:2016-07-14 15:14:27
【问题描述】:
具有以下 Bash 序列来创建文件、更改文件权限(可执行)并运行我想要在一行中执行最后 2 个命令的脚本:
$ touch dotfiles.sh
$ chmod +x ./dotfiles.sh
$ ./dotfiles
解决方案 1
我认为一个可能的解决方案是使用 && 运算符。所以./dotfiles 只有在chmod 成功时才会执行。
但是这个解决方案不起作用,bash 说文件不存在。有什么想法吗?。
(无效的解决方案)
注意:chmod 如果成功则返回 0。所以 && 完成了,但在第二部分失败 ./dotfiles.sh:
$ chmod +x ./dotfiles.sh && ./dotfiles.sh
-bash: ./dotfiles.sh: No such file or directory
$
更新:解决方案 1 是正确的。请参阅下面的完整解释。
【问题讨论】:
-
一一执行命令是否有效?
-
@Roman 是的!当您先执行 chmod 然后执行 ./dotfiles 时,它会起作用。我们的想法是将它们放在一条线上。有什么想法吗?
-
touch dotfiles.sh && chmod +x ./dotfiles.sh && echo $?的输出是什么? -
您已使
dotfiles.sh可执行,但您尝试运行dotfiles— 那是行不通的。将dotfiles.sh复制到dotfiles并使dotfiles可执行,或者运行dotfiles.sh。 -
请注意,如果您无法运行
./dotfiles.sh,那么您很可能在“shebang”行(#!/bin/sh或类似)上遇到错误。如果命名的文件不存在,您可能会收到“找不到文件”错误 - 例如,如果您有#!bin/sh,则缺少/。