zsh записать в файл, путь которого хранится в переменной

Я полагаю, что команда «Ниже» может работать. Как было проверено, у меня она работала нормально

sed -n '/Jul 9 [0-9]\{2\}:/,$p' /var/log/secure| sed '/Jul 9 [0-9]\{2\}:/d'
0
21.05.2021, 16:48
1 ответ

Проблема заключается в том, что вы устанавливаете переменную в строку, содержащую экранированные пробелы. Вы делаете var='foo\ bar', что означает, что строка сохраняется с \. Однако затем вы используете переменную в кавычках (good ), но это означает, что она ищет файл с именем foo\ bar, а не файл с именем foo bar. При установке переменной либо заключает в кавычки строку , либо экранирует пробелы, но не делает и то, и другое:

readonly log_file=/Users/jim.turner.m1/OneDrive\ -\ obfuscated/Shell\ Scripts/sanitize.log

или

readonly log_file="/Users/jim.turner.m1/OneDrive - obfuscated/Shell Scripts/sanitize.log"

Любой из них должен работать. Также обратите внимание, как я изменил вашу переменную, чтобы использовать буквы нижнего регистра, поскольку использование CAPS для переменных оболочки является плохой практикой, поскольку это соглашение для переменных среды и иногда может привести к конфликтам имен переменных. Наконец, очень незначительный момент: вам не нужен $(pwd), вы можете просто использовать переменную PWDи, возможно, вы захотите использовать heredoc , чтобы все было аккуратно и чисто. Если сложить все это вместе с еще парой улучшений, получится:

# Define log file location.
# Log file can be updated later for portability. But for now, I want to keep it in a personal directory.
#
readonly log_file="/Users/jim.turner.m1/OneDrive - obfuscated/Shell Scripts/sanitize.log"

# Prep log file
#
prep_log()
{
  cat << EoF > "$log_file"
==============================================================
Sanitize.sh started $(date).
Sanitizing $PWD
==============================================================

EoF

}

3
28.07.2021, 11:30

Теги

Похожие вопросы