Linux shell文件。 mkdir和pushd命令没有做我喜欢的事情

时间:2015-05-09 14:12:01

标签: linux shell sh mkdir

我尝试创建一个目录(如果它不存在),并且在该行的下游,在该目录中创建一个日志文件。它将位于当前用户主目录中 在伪代码中:

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 个答案:

答案 0 :(得分: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",禁止其通常的 stdout 输出(>/dev/null
    • 请注意, stderr 输出与您的代码不同,故意被禁止,以便错误消息不会丢失。
  • 为了安全起见,如果目录无法创建或更改为(因为此处的|| exit命令并非#39; t显式指定退出代码,前一个命令的退出代码通过 - 在这种情况下,根据定义,它是非零的。)

请注意,我已使用exit,假设您真正想要的是什么;即,当前用户主目录中的"$HOME/LOGS"子目录。

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

默认情况下,

$会评估为$"home/LOGS",即相对路径。 很少使用的home/LOGS字符串适用于本地化