CDIR=$(pwd) 显示“权限被拒绝”

CDIR=$(pwd) 显示“权限被拒绝”

我有一个非常简单的 shell 脚本,叫做 deploy.sh

#!/bin/sh 

CDIR= $(pwd)
echo Hello World!

不幸的是,运行它会出现以下错误:

bird@bird-laptop:~/foo$ sh deploy.sh 
deploy.sh: 3: deploy.sh: /home/bird/foo: Permission denied
Hello World!

有什么线索可以解释为什么会发生这种情况吗?

bird@bird-laptop:~/foo$ ls -l
total 156
-rwxrwxrwx 1 bird bird   327 April  18 00:57 deploy.sh
-rw-r--r-- 1 bird bird   327 April  18 00:53 deploy.sh~

答案1

=删除in后的空格字符

CDIR= $(pwd)

sh不允许 周围有任何空格=

CDIR= $(pwd)方法 ”pwd在未设置变量的情况下运行输出CDIR

由于您无法运行文件夹,因此您会得到Permission denied

答案2

CDIR= $(pwd)
# ...^

=作业中不能有空格。

这样做的目的是:这var=value command是一个合法的声明。它在“命令”的环境中设置“var”变量,但仅限于该环境中。对于您的命令,shell 会看到以下内容:

CDIR= $(pwd)           # first, process the $()
CDIR= /home/bird/foo   # prepare the env with CDIR="" and execute /home/bird/foo
                       # oops, cannot execute /home/bird/foo

答案3

当你给变量赋值sh(或其他 shell 脚本语言) 中,切勿在等号前后使用任何空格:

CDIR= $(pwd)
CDIR=$(pwd)

以下是来自给定链接的一段引文:

=

赋值运算符 (前后没有空格

答案4

Florian 是对的,但你仍然缺少更新

#!/bin/sh 

CDIR=$(pwd)
echo $CDIR
echo Hello World!

分配值后必须将其转换为字符串,因为您无法将命令直接内联到变量中进行显示。请参阅这里

相关内容