如何使用Bash read命令捕获包含“〜”的文件路径(代字号)

时间:2016-07-02 01:22:17

标签: bash tilde

所以我一直在开始使用bash脚本,我正在创建一个从源代码自动安装的脚本(所以基本上它只是为你编译tarball)。我需要它来更改目录才能进入tarball。但是,每当我使用此命令时

read path
cd $path

我总是收到错误tar-installer.sh: line 13: cd: ~: No such file or directory 对于任何需要它的人来说,这是完整的脚本......

#!/bin/bash
# This program auto-installs tarballs for you.
# I designed this for Linux noobies who don't
# know how to install tarballs. Or, it's for
# people like me who are just lazy, and don't
# want to put in the commands ourselves.

echo "Tar Installer v1.1"
echo "Gnu GPL v2.1"
echo -n "Path to tarball:"
read path
cd $path
echo -n "Please enter the file you wish to complile..."
read file
if  $file =="*.tar.gz"
then
    tar -xzf $file
   else
       $file =="*.tgz"
then
    tar -xzf $file
else
    $file =="*.tar.bz2"
then
    tar -xjf $file

使用tarball的最后一部分仍在进行中。但我用于cd path的目录是~/Downloads/

这可能是一个简单的修复,但我不知道如何解决它。

2 个答案:

答案 0 :(得分:4)

您需要通过主路径替换波形符~。如果不直接执行此扩展,则会失败。

 cd "${path/#~/$HOME}"

将使用bash替换~${value/search_term/replacement}替换为您的主目录。

您可能还想将echo&阅读:

read -p "Path to tarball: " pathname

在命名路径(PATH是您的环境变量)

等变量时也要小心

答案 1 :(得分:-2)

因为“cd”是bash的内置函数。 所以你应该尝试像这样运行你的脚本:

 #source tar-installer.sh

此处类似的问题:

[1]: https://stackoverflow.com/questions/255414/why-doesnt-cd-work-in-a-bash-shell-script