在for循环内使用if else条件创建文件

问题描述 投票:0回答:1

我试图在目录(dir)内使用“for”循环并构建一个go代码,然后检查dir名称是否等于dir/task1或dir/task2,是的,将资源/目录与引导程序一起压缩否则仅 zip 引导程序。

当我进行构建时,我发现它不会出现其他情况,请帮忙

build:
    for directory in $$(find dir -mindepth 1 -maxdepth 1 -type d) ; \
        do env GOOS=linux go build -ldflags="-s -w" -o "bootstrap" $${directory}/main.go ; \
            if [ $${directory}='dir/task1' ] || [ $${directory}='dir/task2' ]; then \
                zip -r $${directory}.zip bootstrap resources/ ; \
            else \
                zip $${directory}.zip bootstrap ; \
            fi \
        done
makefile sh
1个回答
0
投票

||
子句中的
if
是一个bashism——也就是说,它对于 GNU Bash 之外的许多 Unix shell 都会失败。此外,值得显式地将
-print
传递给
find
,因为如果在调用中没有给出明确的操作,则它的实现不会默认打印。

解决了这两个问题后,这件事似乎对我有用:

$ cat Makefile 
all:
    for directory in $$(find dir -mindepth 1 -maxdepth 1 -type d -print); do \
        echo $${directory}; \
        if [ $${directory} = 'dir/task1' -o $${directory} = 'dir/task2' ]; then \
            echo "\tif branch"; \
        else \
            echo "\telse branch"; \
        fi; \
    done

$ mkdir -p dir/{task1,task2,task3,task4}
$ make --trace all
Makefile:2: target 'all' does not exist
for directory in $(find dir -mindepth 1 -maxdepth 1 -type d -print); do \
    echo ${directory}; \
    if [ ${directory} = 'dir/task1' -o ${directory} = 'dir/task2' ]; then \
        echo "\tif branch"; \
    else \
        echo "\telse branch"; \
    fi; \
done
dir/task1
    if branch
dir/task3
    else branch
dir/task4
    else branch
dir/task2
    if branch
$ 
© www.soinside.com 2019 - 2024. All rights reserved.