我有一个非常简单的 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!
分配值后必须将其转换为字符串,因为您无法将命令直接内联到变量中进行显示。请参阅这里。