我试图在Bash中编写一个简单的实用程序函数,它将在给定目录中执行"操作".所以我基本上抽象了"去目录,做某事,然后回来"的模式.
inDir() {
if [$# -le 1]; then
return;
else
local dir="$1";
local action="$2";
local cwd=`pwd`;
if [ -d "$dir" ]; then
cd "$dir";
$action;
cd "$cwd";
else
return;
fi
fi
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我运行它时,我得到了我认为是一个虚假的错误,我不知道它来自哪里.例如:
$ inDir "/tmp" "touch hi"
Run Code Online (Sandbox Code Playgroud)
正确创建文件/ tmp/hi,但也给出错误:
[2: command not found
Run Code Online (Sandbox Code Playgroud)
我不确定这对于阅读错误是否重要,但我的提示以"["开头.
有帮助吗?
小智 6
尽管它看起来像什么,'['实际上是一个叫做的命令test
,所以:
if [$# -le 1]; then
Run Code Online (Sandbox Code Playgroud)
应该:
if [ $# -le 1 ]; then
Run Code Online (Sandbox Code Playgroud)
注意'['和下一位代码之间的空格.没有它,代码读作为
test$#
Run Code Online (Sandbox Code Playgroud)
我认为这显然是错误的.在关闭方括号之前还需要一个空格,它不是命令,而是分隔符.