我正在尝试更改文件名,但是脚本给了我错误

时间:2018-10-20 21:20:32

标签: linux bash shell unix scripting

#!/usr/bin/env bash 
touch etc/skel/.abc
cat << EOF > etc/skel/.abc
test -f .profile && source .profile

    if [ -f "etc/skel/.runonce" ]
        then
        source etc/skel/.runonce
        mv "etc/skel/.runonce" "etc/skel/.ranonce"
    else
        echo ".runoce doesn't exist"

    fi 

2 个答案:

答案 0 :(得分:2)

除非要从根目录(或开头的cd /)执行此操作,否则各处的/之前都需要etc

答案 1 :(得分:0)

测试[ -f "etc/skel/.runonce" ]成功了,所以当您采购它时确实出错了。
我不希望您删除.runonce中的文件,所以我认为您在某个地方做了一个changeir。请检查您的cd命令。
注意: 当命令仅更改文件而不设置任何重要变量时,可以更好地运行文件(chmod +x etc/skel/.runonce; etc/skel/.runonce; chmod -x etc/skel/.runonce)。

编辑: OP在注释中将脚本写在runonce下:

我认为这是创建文件.runonce的脚本。我看到了重定向> etc/skel/.runonce,这在.runonce文件中很奇怪。
.runonce是用cat <<EOF ... EOF创建的,但是文件中只有命令时,将执行文件中的命令。

编辑2: OP建议使用脚本

if [[ -e /.ssh ]]
then
   cd /ssh
   git init 
else
   mkdir /ssh
   cd  /ssh
   git init
fi # OP did not this fi
cd

同时具有目录/ssh/.ssh会造成混乱。我会使用/gitrepos
$HOME引用/(仅由root用户运行)时,该名称可能会更改为

if [[ -d /.ssh ]]
then
   # Always make /gitrepos, ignore errors 
   mkdir /gitrepos 2>/dev/null
   # Alternative: Only mkdir when /gitrepos is not a dir
   # test -d /gitrepos || mkdir /gitrepos
   # Both mkdir's will fail when you have a regular file names /gitrepos
   cd /gitrepos
   git init 
   cd
else
   echo "You have no .ssh setup."
fi