检查文件是否存在。 〜/ <directory>`和`/ home / user / <directory>`之间有什么区别?

时间:2019-11-18 18:49:38

标签: linux shell

我写了一个自动化脚本来安装内核。该脚本需要能够在不同的计算机上运行,​​因此它应该独立于用户。我想在开始安装之前检查用户是否已经下载了.tar.gz文件。

#!/bin/bash

file1="/home/csgurel/Downloads/auto_video.tar.gz"
file2="~/Downloads/auto_video.tar.gz"

function kernel_install() {
    if [ -f $file1 ] ; then
        echo "Kernel installation is started."
        # execute the installation functions here.
    else
        echo "The required file couldn't be located."
    fi
}

kernel_install

问题是,当我使用/home/user/<directory>形式的绝对目录(即file1)时,一切正常,并且

  

内核安装开始。

已打印,但是当我使用波浪号符号使目录独立于用户名时,其形式为~/<directory>(即file2)

  

找不到所需的文件。

如何检查该文件是否独立于用户名而存在?

1 个答案:

答案 0 :(得分:1)

这里来自ShellCheck's wiki

波浪号不加引号。使用$ HOME。

问题代码:

rm "~/Desktop/$filename"

正确的代码:

rm "$HOME/Desktop/$filename"

理论值:

在单引号或双引号中,波浪号不会扩展到用户的主目录。使用双引号和$HOME代替。

或者,~/也可以不加引号,例如rm ~/"Desktop/$filename"