如何将alias写入文件且避免执行时被当作命令运行?
问题修复方案
核心错误点
- 变量赋值语法错误:给
jp_string赋值时前面多了$,bash变量赋值的正确格式是变量名=值,不能在变量名前加$。加$后shell会把空值的$jp_string当作命令,后面的字符串被解析成命令参数,这就是报错的根源。 - 变量名笔误:赋值语句里用了未定义的
$jp_path,应该替换为你定义好的$path_to_add。 - 可选优化:如果路径包含空格或特殊字符,建议用双引号包裹路径变量,避免解析出错。
修复后的函数代码
function addPathToJumpPoints() { alias_name=$1 path_to_add=$2 xjp_file=$XFILES/.xtest jp_string="" if [[ ! -z $alias_name ]]; then if [[ ! -z $path_to_add ]]; then # 修复赋值语法和变量名错误,用双引号包裹路径适配特殊字符 jp_string="alias $alias_name='cd \"$path_to_add\"'" if [[ -d $path_to_add ]]; then echo "$jp_string" >> "$xjp_file" echo "Jump point to: [$path_to_add] was created!" else echo "[$path_to_add] does not exist, would you like to create it? (y/n)" read make_path if [[ $make_path == "y" ]]; then mkdir -p "$path_to_add" # 加-p支持创建多级目录 echo "$jp_string" >> "$xjp_file" echo "$path_to_add and a jump point to it were created!" elif [[ $make_path == "n" ]]; then echo "Should a jump point be made regardless? (y/n)" read make_jp if [[ $make_jp == "y" ]]; then echo "$jp_string" >> "$xjp_file" echo "Jump point to [$path_to_add] was created!" elif [[ $make_jp == "n" ]]; then echo "No jump point was created." else echo "Invalid answer! Enter only 'y' for yes and 'n' for no." fi else echo "Invalid answer. Enter only 'y' for yes and 'n' for no." fi fi else echo "Please provide a path to create a jump point" fi else echo "Please provide an alias and a path to create a jump point!" fi }
额外说明
- 所有涉及文件路径和变量输出的地方,用双引号包裹(比如
echo "$jp_string" >> "$xjp_file"),防止路径或变量值含空格时被shell拆分解析。 mkdir加-p参数可以自动创建不存在的父目录,提升函数的实用性。
内容的提问来源于stack exchange,提问作者Paul McCarthy
相关产品推荐
相关产品推荐

