首页 > 解决方案 > Bash - 获取用户输入的目录

问题描述

在 bash 中,我要求用户输入文件的绝对路径,例如dir/to/the/file.txt然后转到该目录并运行一些命令。但我无法进入提供的目录。

我已经尝试了下面的脚本,如果它没有给我一个错误,它只会输出一个“。”

#!/bin/bash
read -p "Please Enter Path:" $r1
parent=$(dirname "${r1}")
echo "${scriptdir}"


#!/bin/bash
read -p "Please Enter Path:" $r1
parent=$(readlink -f "$(dirname "$r1")")
cd $parent


#!/bin/bash
read -p "Please Enter Path:" $r1
parent="$(basename "$(dirname "$r1")")"
echo "$parent"

我究竟做错了什么?

标签: linuxbash

解决方案


正如 KamilCuk 指出的那样,在执行read命令时,它应该将提供的值放入r1变量中。这是在没有$.

所以:

read -p "Please Enter Path: " r1

代替:

read -p "Please Enter Path: " $r1

此外,在打印变量时,括号不是必需的:

echo "$parent"

代替

echo "${parent}"

如果您应用这些修复,第一个脚本应该可以工作:

#!/bin/bash
read -p "Please Enter Path:" r1
parent=$(dirname "$r1")
cd "$parent"

编辑:用户 Adhoc 添加了一个很好的评论:如果我们将-r参数添加到read命令中,反斜杠将不会表现为转义字符。这将改变脚本如下:

#!/bin/bash
read -p "Please Enter Path:" -r r1
parent=$(dirname "$r1")
cd "$parent"

推荐阅读