Shell中confirm函数调用VSCodium安装脚本输出混乱问题求解
问题根因
你出现报错的核心原因是confirm函数里执行安装脚本的逻辑写错了:
# 错误写法 $installation | sh
你已经给$installation对应的脚本添加了执行权限,直接运行该脚本即可。而管道符|的作用是把前一个命令的标准输出传给后一个命令作为标准输入,相当于你把VSCodium.sh运行时输出的dd操作日志、apt更新日志等非Shell语法的内容喂给了sh解释器执行,自然会出现「命令未找到」「语法错误」「Broken pipe」等报错。
你之前测试hello.sh没出问题,是因为hello.sh的输出本身就是合法的Shell命令(echo "hello world"),传给sh执行刚好能正常运行,不具备参考性。
修复方案
把confirm函数里对应行直接改成执行脚本即可:
confirm() { local message=${1:?Must provide an message.} local installation=${2:?Must provide installation script path} # 顺便修正拼错的变量名 falied -> failed local failed=${3:-Incorrect response. Exiting} read -rp "$message " response case "$response" in [yY]) chmod 755 "$installation" # 去掉管道,直接执行脚本 "$installation" ;; *) echo "$failed" ;; esac }
额外优化建议
- 给所有变量调用加上双引号
"",避免路径包含空格时出现异常 - 原逻辑里
*)分支直接执行$falied是错误的,应该用echo输出提示内容,否则会把提示文本当作命令执行 - 可以在VSCodium.sh开头加上
#!/bin/bash声明脚本解释器,避免不同环境默认Shell差异导致的兼容问题
内容的提问来源于stack exchange,提问作者Niviral
相关产品推荐
相关产品推荐

