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

Linux shell file. mkdir and pushd commands not doing what I'd like

我正在尝试创建一个目录(如果它不存在),然后再往下,在该目录中创建一个日志文件。它将位于 当前 用户主目录
在伪代码中:

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 
}

如有任何帮助,我们将不胜感激。

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 命令没有如果没有明确指定退出代码,则会传递前一个命令的退出代码 - 在这种情况下,根据定义,它是非零的)。

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

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

$"home/LOGS" 将默认评估为 home/LOGS,即 relative 路径。 很少使用的 $"..." 字符串用于 localization.