linux - 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"
我究竟做错了什么?
解决方案
正如 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"