直接运行 ./start.sh,但报告意外错误



我有一个'start.sh'程序

me@host:~$ cat start.sh
nohup google-chrome &
nohup lantern &
xdg-open .
emacs &

尝试运行它

me@host:~$ ./start.sh
bash: ./start.sh: Permission denied
me@host:~$ sudo ./start.sh
[sudo] password for gaowei: 
sudo: ./start.sh: command not found

尽管如此,这还是有效的

me@host:~$ bash start.sh
nohup: appending output to 'nohup.out'
nohup: appending output to 'nohup.out'

我无法弄清楚使用"./start.sh"有什么问题

me@host:~$ ls | grep 'start.sh'
start.sh

正在发生的事情是您没有执行start.sh文件的权限。如果您是文件的所有者,您必须做的是像这样授予文件的执行权限。

chmod u+x start.sh

或使用shbash命令运行它

sh start.sh

bash start.sh

将执行它,无需执行权限。

注意:在某些情况下,稍后在 Mac OS 中需要阅读的某处。如果我错了,请纠正我。

编辑: 每@GordonDavisson条评论。在您的情况下,使用简单的脚本,使用Bourne shell还是BASH(shbash)并不重要,但在许多情况下,您必须指定要使用的shell,最好的方法是放置每个脚本的#!/bin/bash(#!/usr/bin/env bash在MacOS上)。#!/bin/bash将强制使用bash,如果文件通过授予其执行权限并使用./start.sh运行来执行

一个事实:

  • 伯恩·谢sh
  • BourneAgainshellbash

我无法弄清楚使用"./start.sh"有什么问题

这样做:

ls -l start.sh

你应该得到这样的东西:

-rw-r--r-- 1 <username> <group> 1 Mar 17 08:57 start.sh

这就是你的问题所在。您没有执行权。如果您的用户名与<username>不同,但您是组的成员<group>您可以执行以下操作:

chmod g+x start.sh

你可以通过这样做给其他人(不是<user>,也不是<group>的成员)执行权限(非常糟糕的主意):

chmod o+x start.sh

要向所有用户授予执行权限,请执行以下操作:

chmod +x start.sh

这也是一个坏主意。

最新更新