source 命令的用法(与 sh Filename、./Filename的区别)

source 命令简单来说,就是读取脚本里的语句,并在当前Shell中执行,脚本里面所有新建、改变变量的语句都会保存在当前shell里。


目录

1、source 命令的使用方法

2、source命令的妙用 

3、source Filename 和 ./Filename的区别


1、source 命令的使用方法

语法格式:source  脚本文件名  或者  . filename (. 和 filename之间有空格)

# 使用source来执行 variable.sh 脚本
linux@linux:~/Templates$ source variable.sh

# 在命令行打印 variable.sh 脚本里的变量
linux@linux:~/Templates$ echo $COUNT
1

因为是直接读取脚本内容到当前Shell执行,所以创建的变量可以直接在当前Shell 中使用。

但是如果新开一个终端窗口,相当于一个新的Shell,不会拷贝上一个窗口的环境。 

2、source命令的妙用 

source命令的作用是读取脚本里的语句,并在当前Shell中执行,即便对方不是脚本,只是一个具有执行权限的普通文件,source命令依然会执行里面的语句。有的时候我们需要频繁敲一些比较长而且繁琐的命令,这个时候就可以使用source 命令

比如有一个 myCommand 文件(里面暂时放一些简单的命令)

# myCommand 文件
ps jax | grep mytest
ls -al
pwd

 我们使用source命令来执行这个文件(注意这个文件必须要有执行权限)

 

3、source Filename 和 ./Filename的区别

当一个文件具有执行权限的时候,sh  Filename 和 ./Filename 没有区别,下面主要比对source Filename 和 ./Filename的区别:

  • source Filename:读取脚本里的语句,并在当前Shell中执行。脚本里面所有新建、改变变量的语句都会保存在当前shell里

  • ./Filename:创建一个新的子Shell,并在子Shell中执行。子Shell会继承父Shell的环境,但是子Shell对变量的创建、修改不会更新到父Shell
    • 即便使用export也不会影响到父Shell的环境
    • 父Shell对变量的修改会更新到子Shell
    • 父Shell可以影响子Shell,但子Shell无法影响到父Shell

tools/fdtgrep.c:745:5: warning: no previous prototype for ‘utilfdt_read_err’ [-Wmissing-prototypes] int utilfdt_read_err(const char *filename, char **buffp) ^ tools/fdtgrep.c:751:7: warning: no previous prototype for ‘utilfdt_read_len’ [-Wmissing-prototypes] char *utilfdt_read_len(const char *filename, off_t *len) ^ tools/fdtgrep.c:765:7: warning: no previous prototype for ‘utilfdt_read’ [-Wmissing-prototypes] char *utilfdt_read(const char *filename) ^ tools/fdtgrep.c:1005:6: warning: no previous prototype for ‘util_usage’ [-Wmissing-prototypes] void util_usage(const char *errmsg, const char *synopsis, ^ tools/fdtgrep.c:1074:6: warning: no previous prototype for ‘util_version’ [-Wmissing-prototypes] void util_version(void) ^ In file included from tools/lib/hash-checksum.c:1:0: ./tools/../lib/hash-checksum.c:19:5: warning: no previous prototype for ‘hash_calculate’ [-Wmissing-prototypes] int hash_calculate(const char *name, ^ HOSTLD tools/gen_ethaddr_crc HOSTLD tools/fdtgrep HOSTLD tools/dumpimage HOSTLD tools/mkimage AR arch/arm/cpu/built-in.o CC cmd/bootm.o CC cmd/boot.o CC cmd/help.o CC cmd/panic.o CC cmd/version.o CC cmd/blk_common.o AR cmd/arm/built-in.o CC disk/part.o CC cmd/sstar/ufu/g_sstar_dnl.o CC common/init/board_init.o AR drivers/adc/built-in.o CC arch/arm/cpu/armv7/cache_v7.o AR drivers/dma/ti/built-in.o AS arch/arm/lib/vectors.o AS arch/arm/lib/crt0.o AR drivers/dma/built-in.o AS arch/arm/lib/setjmp.o AS arch/arm/cpu/armv7/cache_v7_asm.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'cmd/version.o' failed make[4]: *** [cmd/version.o] Error 1 make[4]: *** Deleting file 'cmd/version.o' make[4]: *** 正在等待未完成的任务.... CC arch/arm/mach-sstar/sstar_sys_utility.o AS arch/arm/lib/relocate.o CC arch/arm/mach-sstar/board_common.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'cmd/help.o' failed make[4]: *** [cmd/help.o] Error 1 make[4]: *** Deleting file 'cmd/help.o' CC arch/arm/lib/bootm-fdt.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'cmd/panic.o' failed make[4]: *** [cmd/panic.o] Error 1 make[4]: *** Deleting file 'cmd/panic.o' CC arch/arm/lib/bootm.o AR drivers/ata/built-in.o CC arch/arm/cpu/armv7/cpu.o AR drivers/axi/built-in.o CC drivers/gpio/gpio-uclass.o CC drivers/block/blk-uclass.o CC drivers/block/blkcache.o CC arch/arm/mach-sstar/iford/chip.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'arch/arm/cpu/armv7/cpu.o' failed make[4]: *** [arch/arm/cpu/armv7/cpu.o] Error 1 make[4]: *** Deleting file 'arch/arm/cpu/armv7/cpu.o' make[4]: *** 正在等待未完成的任务.... CC arch/arm/mach-sstar/iford/board.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'arch/arm/lib/bootm-fdt.o' failed make[4]: *** [arch/arm/lib/bootm-fdt.o] Error 1 make[4]: *** Deleting file 'arch/arm/lib/bootm-fdt.o' make[4]: *** 正在等待未完成的任务.... /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'cmd/boot.o' failed make[4]: *** [cmd/boot.o] Error 1 make[4]: *** Deleting file 'cmd/boot.o' /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'common/init/board_init.o' failed make[5]: *** [common/init/board_init.o] Error 1 make[5]: *** Deleting file 'common/init/board_init.o' AS arch/arm/mach-sstar/iford/reset.o scripts/Makefile.build:409: recipe for target 'common/init' failed make[4]: *** [common/init] Error 2 Makefile:1908: recipe for target 'common' failed make[3]: *** [common] Error 2 make[3]: *** 正在等待未完成的任务.... /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'arch/arm/mach-sstar/board_common.o' failed make[4]: *** [arch/arm/mach-sstar/board_common.o] Error 1 make[4]: *** Deleting file 'arch/arm/mach-sstar/board_common.o' make[4]: *** 正在等待未完成的任务.... AR drivers/bus/built-in.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'arch/arm/cpu/armv7/cache_v7.o' failed make[4]: *** [arch/arm/cpu/armv7/cache_v7.o] Error 1 make[4]: *** Deleting file 'arch/arm/cpu/armv7/cache_v7.o' scripts/Makefile.build:268: recipe for target 'arch/arm/mach-sstar/iford/chip.o' failed Makefile:1908: recipe for target 'arch/arm/cpu/armv7' failed make[3]: *** [arch/arm/cpu/armv7] Error 2 make[5]: *** [arch/arm/mach-sstar/iford/chip.o] Error 1 make[5]: *** Deleting file 'arch/arm/mach-sstar/iford/chip.o' make[5]: *** 正在等待未完成的任务.... CC disk/part_dos.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'cmd/blk_common.o' failed make[4]: *** [cmd/blk_common.o] Error 1 make[4]: *** Deleting file 'cmd/blk_common.o' CC cmd/sstar/ufu/f_firmware_update.o CC cmd/sstar/ufu/ufu.o CC cmd/sstar/cmd_sstar_common.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'arch/arm/mach-sstar/sstar_sys_utility.o' failed /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 make[4]: *** [arch/arm/mach-sstar/sstar_sys_utility.o] Error 1 make[4]: *** Deleting file 'arch/arm/mach-sstar/sstar_sys_utility.o' scripts/Makefile.build:268: recipe for target 'cmd/bootm.o' failed make[4]: *** [cmd/bootm.o] Error 1 make[4]: *** Deleting file 'cmd/bootm.o' AR drivers/cache/built-in.o CC cmd/sstar/estar.o CC drivers/core/device.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/block/blkcache.o' failed make[5]: *** [drivers/block/blkcache.o] Error 1 make[5]: *** Deleting file 'drivers/block/blkcache.o' make[5]: *** 正在等待未完成的任务.... AR drivers/clk/analogbits/built-in.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'arch/arm/lib/bootm.o' failed make[4]: *** [arch/arm/lib/bootm.o] Error 1 make[4]: *** Deleting file 'arch/arm/lib/bootm.o' Makefile:1908: recipe for target 'arch/arm/lib' failed make[3]: *** [arch/arm/lib] Error 2 CC drivers/crypto/fsl/sec.o AR drivers/crypto/rsa_mod_exp/built-in.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'cmd/sstar/ufu/g_sstar_dnl.o' failed make[6]: *** [cmd/sstar/ufu/g_sstar_dnl.o] Error 1 make[6]: *** Deleting file 'cmd/sstar/ufu/g_sstar_dnl.o' CC drivers/core/fdtaddr.o make[6]: *** 正在等待未完成的任务.... CC drivers/core/lists.o CC drivers/clk/imx/clk-gate2.o CC cmd/sstar/riu.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'arch/arm/mach-sstar/iford/board.o' failed make[5]: *** [arch/arm/mach-sstar/iford/board.o] Error 1 make[5]: *** Deleting file 'arch/arm/mach-sstar/iford/board.o' scripts/Makefile.build:409: recipe for target 'arch/arm/mach-sstar/iford' failed make[4]: *** [arch/arm/mach-sstar/iford] Error 2 Makefile:1908: recipe for target 'arch/arm/mach-sstar' failed make[3]: *** [arch/arm/mach-sstar] Error 2 /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 CC cmd/sstar/debug.o scripts/Makefile.build:268: recipe for target 'cmd/sstar/cmd_sstar_common.o' failed make[5]: *** [cmd/sstar/cmd_sstar_common.o] Error 1 make[5]: *** Deleting file 'cmd/sstar/cmd_sstar_common.o' make[5]: *** 正在等待未完成的任务.... /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'cmd/sstar/estar.o' failed make[5]: *** [cmd/sstar/estar.o] Error 1 make[5]: *** Deleting file 'cmd/sstar/estar.o' CC drivers/clk/imx/clk-pllv3.o CC drivers/core/root.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'disk/part.o' failed make[4]: *** [disk/part.o] Error 1 make[4]: *** Deleting file 'disk/part.o' make[4]: *** 正在等待未完成的任务.... AR drivers/clk/tegra/built-in.o disk/part_dos.c:559:13: warning: 'decode_partitionInfo' defined but not used [-Wunused-function] 559 | static void decode_partitionInfo(unsigned char *in, PartitionInfo *partInfo) | ^~~~~~~~~~~~~~~~~~~~ CC drivers/clk/imx/clk-pfd.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'cmd/sstar/ufu/ufu.o' failed make[6]: *** [cmd/sstar/ufu/ufu.o] Error 1 make[6]: *** Deleting file 'cmd/sstar/ufu/ufu.o' CC drivers/core/uclass.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/block/blk-uclass.o' failed make[5]: *** [drivers/block/blk-uclass.o] Error 1 make[5]: *** Deleting file 'drivers/block/blk-uclass.o' scripts/Makefile.build:409: recipe for target 'drivers/block' failed make[4]: *** [drivers/block] Error 2 make[4]: *** 正在等待未完成的任务.... /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/crypto/fsl/sec.o' failed make[6]: *** [drivers/crypto/fsl/sec.o] Error 1 make[6]: *** Deleting file 'drivers/crypto/fsl/sec.o' scripts/Makefile.build:409: recipe for target 'drivers/crypto/fsl' failed make[5]: *** [drivers/crypto/fsl] Error 2 scripts/Makefile.build:409: recipe for target 'drivers/crypto' failed make[4]: *** [drivers/crypto] Error 2 CC drivers/core/util.o CC drivers/core/device-remove.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'cmd/sstar/debug.o' failed make[5]: *** [cmd/sstar/debug.o] Error 1 make[5]: *** Deleting file 'cmd/sstar/debug.o' /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/gpio/gpio-uclass.o' failed make[4]: *** [drivers/gpio/gpio-uclass.o] Error 1 make[4]: *** Deleting file 'drivers/gpio/gpio-uclass.o' Makefile:1908: recipe for target 'drivers/gpio' failed make[3]: *** [drivers/gpio] Error 2 CC drivers/core/simple-bus.o CC drivers/core/dump.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/core/fdtaddr.o' failed make[5]: *** [drivers/core/fdtaddr.o] Error 1 make[5]: *** Deleting file 'drivers/core/fdtaddr.o' make[5]: *** 正在等待未完成的任务.... AR drivers/clk/ti/built-in.o CC drivers/clk/clk-uclass.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'cmd/sstar/riu.o' failed make[5]: *** [cmd/sstar/riu.o] Error 1 make[5]: *** Deleting file 'cmd/sstar/riu.o' CC drivers/clk/clk_fixed_rate.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/core/util.o' failed make[5]: *** [drivers/core/util.o] Error 1 make[5]: *** Deleting file 'drivers/core/util.o' CC drivers/clk/clk_fixed_factor.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/core/simple-bus.o' failed make[5]: *** [drivers/core/simple-bus.o] Error 1 make[5]: *** Deleting file 'drivers/core/simple-bus.o' CC drivers/clk/clk.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'disk/part_dos.o' failed make[4]: *** [disk/part_dos.o] Error 1 make[4]: *** Deleting file 'disk/part_dos.o' Makefile:1908: recipe for target 'disk' failed make[3]: *** [disk] Error 2 CC drivers/clk/clk-divider.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/clk/imx/clk-gate2.o' failed make[6]: *** [drivers/clk/imx/clk-gate2.o] Error 1 make[6]: *** Deleting file 'drivers/clk/imx/clk-gate2.o' make[6]: *** 正在等待未完成的任务.... CC drivers/clk/clk-mux.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/core/lists.o' failed make[5]: *** [drivers/core/lists.o] Error 1 make[5]: *** Deleting file 'drivers/core/lists.o' CC drivers/clk/clk-gate.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/core/root.o' failed make[5]: *** [drivers/core/root.o] Error 1 make[5]: *** Deleting file 'drivers/core/root.o' CC drivers/clk/clk-fixed-factor.o /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/clk/clk_fixed_rate.o' failed make[5]: *** [drivers/clk/clk_fixed_rate.o] Error 1 make[5]: *** Deleting file 'drivers/clk/clk_fixed_rate.o' make[5]: *** 正在等待未完成的任务.... /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/clk/clk_fixed_factor.o' failed make[5]: *** [drivers/clk/clk_fixed_factor.o] Error 1 make[5]: *** Deleting file 'drivers/clk/clk_fixed_factor.o' /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/clk/clk.o' failed make[5]: *** [drivers/clk/clk.o] Error 1 make[5]: *** Deleting file 'drivers/clk/clk.o' /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/clk/imx/clk-pfd.o' failed make[6]: *** [drivers/clk/imx/clk-pfd.o] Error 1 make[6]: *** Deleting file 'drivers/clk/imx/clk-pfd.o' /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/core/dump.o' failed make[5]: *** [drivers/core/dump.o] Error 1 make[5]: *** Deleting file 'drivers/core/dump.o' /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/clk/clk-gate.o' failed make[5]: *** [drivers/clk/clk-gate.o] Error 1 make[5]: *** Deleting file 'drivers/clk/clk-gate.o' /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/clk/clk-mux.o' failed make[5]: *** [drivers/clk/clk-mux.o] Error 1 make[5]: *** Deleting file 'drivers/clk/clk-mux.o' /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/core/device-remove.o' failed make[5]: *** [drivers/core/device-remove.o] Error 1 make[5]: *** Deleting file 'drivers/core/device-remove.o' /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/clk/imx/clk-pllv3.o' failed make[6]: *** [drivers/clk/imx/clk-pllv3.o] Error 1 make[6]: *** Deleting file 'drivers/clk/imx/clk-pllv3.o' scripts/Makefile.build:409: recipe for target 'drivers/clk/imx' failed make[5]: *** [drivers/clk/imx] Error 2 /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/core/uclass.o' failed make[5]: *** [drivers/core/uclass.o] Error 1 make[5]: *** Deleting file 'drivers/core/uclass.o' /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/clk/clk-fixed-factor.o' failed make[5]: *** [drivers/clk/clk-fixed-factor.o] Error 1 make[5]: *** Deleting file 'drivers/clk/clk-fixed-factor.o' /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/clk/clk-divider.o' failed make[5]: *** [drivers/clk/clk-divider.o] Error 1 make[5]: *** Deleting file 'drivers/clk/clk-divider.o' /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/core/device.o' failed make[5]: *** [drivers/core/device.o] Error 1 make[5]: *** Deleting file 'drivers/core/device.o' scripts/Makefile.build:409: recipe for target 'drivers/core' failed make[4]: *** [drivers/core] Error 2 /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'drivers/clk/clk-uclass.o' failed make[5]: *** [drivers/clk/clk-uclass.o] Error 1 make[5]: *** Deleting file 'drivers/clk/clk-uclass.o' scripts/Makefile.build:409: recipe for target 'drivers/clk' failed make[4]: *** [drivers/clk] Error 2 Makefile:1908: recipe for target 'drivers' failed make[3]: *** [drivers] Error 2 /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'cmd/sstar/ufu/f_firmware_update.o' failed make[6]: *** [cmd/sstar/ufu/f_firmware_update.o] Error 1 make[6]: *** Deleting file 'cmd/sstar/ufu/f_firmware_update.o' scripts/Makefile.build:409: recipe for target 'cmd/sstar/ufu' failed make[5]: *** [cmd/sstar/ufu] Error 2 scripts/Makefile.build:409: recipe for target 'cmd/sstar' failed make[4]: *** [cmd/sstar] Error 2 Makefile:1908: recipe for target 'cmd' failed make[3]: *** [cmd] Error 2 make[3]: *** wait: 没有子进程。 停止。 makefile:33: recipe for target 'GNUmakefile' failed make[2]: *** [GNUmakefile] Error 2 make[2]: Leaving directory '/home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/boot' board/uboot/uboot.mk:26: recipe for target 'boot' failed make[1]: *** [boot] Error 1 make[1]: Leaving directory '/home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project' makefile:68: recipe for target 'image' failed make: *** [image] Error 2
09-24
<think>嗯,用户这次遇到的错误是关于编译U-Boot时出现的权限问题,特别是`scripts/sstar_coding_style_sanitize.py`脚本没有执行权限。从错误信息来看,很多编译步骤失败都是因为这个Python脚本无法执行,导致编译过程中断。 首先,我需要确认用户的问题根源。用户之前已经处理过权限问题,比如`setup_config.sh`和`build_pre_process_config.sh`的权限问题,但这次是另一个脚本。这可能是因为项目中有多个脚本需要执行权限,用户可能没有全部设置,或者某些脚本在后续步骤中被新增但未处理权限。 接下来,用户提供的错误日志显示多个编译步骤失败,如`cmd/version.o`、`cmd/help.o`等,都是因为`/bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够`。这说明该Python脚本确实缺少执行权限。用户需要为这个脚本添加执行权限,使用`chmod +x`命令。 另外,用户可能没有注意到这个脚本是否存在其他问题,比如shebang行是否正确。如果脚本没有指定解释器,可能需要添加`#!/usr/bin/env python3`这样的行,确保系统能正确调用Python解释器。但根据错误信息,问题主要是权限,所以可能不需要修改脚本内容,除非后续出现其他错误。 用户可能还希望了解为什么这个脚本会在多个编译步骤中被调用。这可能是因为该脚本是代码风格检查的一部分,在每个源文件编译前运行,确保代码符合项目规范。因此,权限问题会影响整个编译流程,导致大量错误。 解决方案方面,首先需要为`sstar_coding_style_sanitize.py`添加执行权限。然后,用户可能需要检查其他相关脚本是否有类似问题,确保所有需要执行的脚本都有正确的权限。此外,用户可能需要确认Python环境是否正确安装,避免出现其他运行时错误。 最后,用户可能需要了解如何预防此类问题,比如在添加新脚本时自动设置权限,或者在Makefile中检查权限的步骤。这可以作为相关问题的一部分,帮助用户更好地维护项目环境。 </think>问题出现在 U-Boot 编译阶段,核心错误信息为: ``` /bin/sh: ./scripts/sstar_coding_style_sanitize.py: 权限不够 scripts/Makefile.build:268: recipe for target 'xxx.o' failed ``` --- ### 原因分析 1. **代码风格检查脚本权限不足** `scripts/sstar_coding_style_sanitize.py` 缺少执行权限(`x`),导致编译时无法调用该脚本进行代码风格检查。 2. **脚本依赖未满足** - 脚本可能未指定 Python 解释器(如缺少 `#!/usr/bin/env python3`)。 - 系统未安装 Python 或依赖库(如 `pylint`、`black` 等)。 3. **编译规则强制触发脚本** - `Makefile.build` 中定义的编译规则强制调用该脚本,权限问题导致所有依赖它的编译步骤失败。 --- ### 解决方案 1. **为脚本添加执行权限** ```bash chmod +x /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/boot/scripts/sstar_coding_style_sanitize.py ``` 2. **验证脚本可执行性** - 检查脚本首行是否包含 Python 解释器声明: ```python #!/usr/bin/env python3 ``` - 手动运行脚本测试: ```bash ./scripts/sstar_coding_style_sanitize.py --help ``` 3. **安装 Python 依赖(如需要)** ```bash sudo apt install python3 python3-pip pip3 install pylint black ``` 4. **临时禁用代码风格检查(调试用)** - 修改 `Makefile.build`,注释或删除触发脚本的规则: ```makefile # cmd/%.o: %.c # ./scripts/sstar_coding_style_sanitize.py $< && $(CC) $(CFLAGS) -c $< -o $@ ``` 5. **批量修复所有脚本权限(预防性操作)** ```bash find /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/boot/scripts -type f -name "*.py" -exec chmod +x {} \; ``` --- ### 相关问题 1. 如何为 Python 脚本添加执行权限并确保其可运行? 2. 编译嵌入式项目时,如何排查代码风格检查工具的依赖问题? 3. 如何修改 Makefile 以临时禁用代码风格检查? 4. 为什么缺少 Python 解释器会导致编译失败? 5. 如何批量修复项目中所有 Python 脚本的执行权限?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值