You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本中使用变量执行tar命令报错的问题排查

问题原因与解决办法

1. read命令的语法错误

你写错了read的用法——read后面直接写变量名就行,不能加$符号。$是用来读取变量值的,而read是给变量赋值,正确写法是read dir,不是read $dir。

当你写read $dir时,dir变量还没赋值,$dir是空的,相当于执行read(不带变量名),这时候你输入的内容会被存到默认变量REPLY里,而你的dir变量还是空的。所以tar命令里的$dir没有实际路径,tar找不到要打包的内容,就会报错“Cowardly refusing to create an empty archive”。

2. 波浪号(~)的扩展问题

就算修正了read的写法,直接输入~/test也可能出问题:read读取的字符串里的~不会被shell自动转换成你的家目录路径。解决这个问题有两种方式:

  • 让用户输入绝对路径(比如/home/你的用户名/test)
  • 用eval命令扩展波浪号,把输入的~/test转换成实际路径

另外,给变量加上双引号"$dir",能避免路径里有空格时出现错误。

修正后的完整脚本

#!/bin/bash
echo "Backup which directory?"
read dir
eval dir="$dir"
tar --create --verbose --bzip2 --file=myfile.tbz "$dir"

内容的提问来源于stack exchange,提问作者WDUK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:02:41