2015-05-09 69 views
-1

我试图创建一个目录,如果它不存在,并且进一步在该行下创建该目录中的日志文件。这将是在当前用户的主目录
伪代码:Linux shell文件。 mkdir和pushd命令不做我想要的

If directory "/home/LOGS" does not exist 
make directory "/home/LOGS" 

然后只要创建一个日志文件,它会在该目录中保存,而不是程序是从运行的目录。
这是我迄今为止,它只是不工作...

pushd -n $"../LOGS" >/dev/null 2>&1 

#Create the logs folder 
if [ ! -d $"home/LOGS" ]; then 
mkdir -p $"home/LOGS" 
fi 

如果有帮助,我的文件被保存,象这样:

 function savefile { 
# Save to file 
    if [ -e $username.log ]; then 
    echo "Username already exists, returning you to the menu." 
    sleep 2 
    clear 
     menu 
    else 
    echo $fullname >> $username.log 
    echo $password >> $username.log 
     curdate=$(date +'%d/%m/%Y %H:%M:%S') 
    echo $curdate >> $username.log 
    echo "Creating your account" 
    sleep 2 
    clear 
    echo "Account created" 
    echo 
    afterBasic 
    fi 
} 

任何帮助将不胜感激。

+1

您是否认为在测试之前尝试“pushd”到目录中可能存在问题,以查看该目录是否实际存在? –

+0

我以前试过把它放在后面。我现在再试一次。 – Badja

+0

@DavidHoelzer:一般的好点;但请注意,即使按正确的顺序,当前目录中也不会有任何更改,因为正在使用“pushd -n”。 – mklement0

回答

3

mkdir -p本身提供你想要的逻辑,所以你可以简单地做:

mkdir -p "$HOME/LOGS" && pushd "$HOME/LOGS" >/dev/null || exit 
  • mkdir -p创建目标目录,如果它不已经存在,然后更改。
    • 请注意,即使目标已存在,mkdir -p也表示成功。
    • 这允许无条件使用mkdir -p,而不必担心目录是否已经存在或没有。
  • && pushd "$HOME/LOGS" >/dev/null然后改到目录"$HOME/LOGS",抑制其一贯标准输出输出(>/dev/null
    • 注意标准错误输出,不像在你的代码,是故意抑制,这样的错误信息唐不会迷路。
  • 为了安全起见,|| exit退出以非零退出代码脚本(信号故障),如果该目录无法创建或更改来(因为这里的exit命令没有明确指定的退出代码,前面的命令的退出代码被传递 - 在这种情况下,根据定义它是非零的)。

请注意,我用"$HOME/LOGS",假设这是你真正想要的;即当前用户的主目录中的LOGS子目录。

如果您想要绝对路径/home/LOGS,只需从原始字符串中删除$即可。

$"home/LOGS"将默认取值为home/LOGS,即相对路径。 很少使用的$"..."字符串意味着用于本地化

+0

谢谢,我改变了这一点,以得到我需要的东西! – Badja

+0

忘了编辑它,我确实改变了它,编辑了显示的答案 – Badja