Linux Shell脚本平铺扩展

Linux Shell脚本平铺扩展,linux,shell,Linux,Shell,这是我的剧本: #!/bin/bash echo "Digite o local em que deseja instalar o IGRAFU(pressione enter para instalar em ${HOME}/IGRAFO):" read caminho if test -z $caminho then caminho="${HOME}/IGRAFO" fi echo "O IGRAFU será instalado no diretório: $caminho" mkd

这是我的剧本:

#!/bin/bash 
echo "Digite o local em que deseja instalar o IGRAFU(pressione enter para 
instalar em 
${HOME}/IGRAFO):"
read caminho
if test -z $caminho
then
caminho="${HOME}/IGRAFO"
fi
echo "O IGRAFU será instalado no diretório: $caminho"
mkdir -pv $caminho

mv -v ./* $caminho
echo "Pronto!"
在“read Camino”中,我可能会从用户处收到类似~/somefolder的路径。当脚本接收到这种路径时,mv和mkdir都不会进行tilde扩展,因此它将尝试创建~/somefolder而不是/home/username/somefolder,因此失败


如何确保瓷砖将转换为主变量?

您可能需要评估该变量以正确替换它。一个例子就是简单地去做

caminho=`eval "echo $caminho"`
请记住,如果
caminho
包含分号或引号,这将中断,它还将反斜杠视为转义,如果数据不可信,则需要注意您不是注入攻击的目标


希望这能有所帮助。

如果if不是
/home
的话,可以使用
/home/${USER}
替换您的高用户级目录,引用和扩展总是很棘手,尤其是在bash中。 如果您自己的主目录足够好,则此代码可以工作(我已经对其进行了测试):


假设所有用户的主目录都有一个公共的父目录是一个非常糟糕的假设。
if test -z $caminho
then
caminho="${HOME}/IGRAFO"
else
  case "$caminho" in
    '~')   caminho="$HOME" ;;
    '~'/*) caminho="$HOME/${caminho#'~/'}" ;; 
    '~'*)  echo "Case of '$caminho' is not implemented" 1>&2 ;;
  esac
fi