Kie*_* Ho 5 bash bash-scripting
这是我的代码:
#!/bin/bash
if [[ -d ~/viwiki ]]; then
cd ~/viwiki
else
mkdir ~/viwiki
cd ~/viwiki
fi
if ! [[ -d ./log ]]; then
mkdir log
mkdir log/log
mkdir "log/wget"
elif ! [[ -d ./log/log ]]; then
mkdir log/log
elif ! [[ -d "./log/wget" ]]; then
mkdir "log/wget"
fi
Run Code Online (Sandbox Code Playgroud)
运行时,出现错误:
tuankiet65@UbuntuPC:~$ sh viwik/test2.sh
viwik/test2.sh: 2: viwik/test2.sh: [[: not found
viwik/test2.sh: 8: viwik/test2.sh: [[: not found
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
Dan*_*son 13
我猜如果你跑
readlink -f $(which sh)
Run Code Online (Sandbox Code Playgroud)
你不会得到 Bash 作为返回值,而是 Dash。您有正确的序言,但这仅在您将脚本设为./test2.sh
可执行后运行时才重要。
现在,您通过sh
解释器(可能是 Dash)强制运行脚本,并且该[[]]
构造是特定于 Bash的构造。
这就是为什么?”。如果您只是用单个括号替换双括号(并更改#!/bin/bash
为#!/bin/sh
,因为您的脚本现在只使用 POSIX 函数)它应该按预期运行。
在 Debian 上的演示,test.sh
包括内容:
#!/bin/bash
if [[ "string" == "string" ]]; then
echo This is Bash
fi
Run Code Online (Sandbox Code Playgroud)
有时候是这样的:
$ readlink -f $(which sh)
/bin/dash
$ sh test.sh
test.sh: 2: test.sh: [[: not found
$ bash test.sh
This is Bash
$ chmod 755 test.sh
$ ./test.sh
This is Bash
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9554 次 |
最近记录: |