Как Вы “отключаете” oh-my-zsh (и zsh), не удаляя его?

Различия между обеими командами:

  • 2-й список отсортирован наоборот (-r)
  • 2-й список использует штамп времени изменения в качестве ключа сортировки (-t)
  • 1-й список использует штамп ctime в качестве ключа сортировки (-tc)

На UNIX файл имеет 3 метки времени (atime, ctime, mtime), которые обновляются при различных условиях.

Заключить статью Википедии в кавычки о статистике:

atime: время последнего доступа (ls - лютеций), mtime: время последнего изменения (ls-l), и ctime: время последнего изменения состояния (ls-lc).

Пример для изменения состояния изменяет полномочия файла.

16
15.06.2014, 06:52
6 ответов

Эта проблема была опубликована как ошибка более 10 лет назад . Я не уверен, как музыкальный плеер, который не может играть альбомы в неслучайном порядке с 2006 года, стал по умолчанию на debian, но само собой разумеется, что я удалил его. Это разочаровывает.

Я также ценю ответ fossfreedom.

-121--70925-

Размещение другого решения, поскольку файл написан случайным образом, ломает мою идею tail . Мысль rsync может быть многообещающей здесь, поскольку rsync может работать с использованием алгоритма дельта-передачи, экономя время передачи, только отправляя измененные части файла. При запуске rsync для двух локальных файлов по умолчанию используется режим --whole-file , который не является нужным.

Предложение

rsync -av --inplace --no-whole-file /your/local/file.dat /your/remote/file.dat

... или (если монтирование CIFS не согласовано с дельта-передачей) используйте чистый rsync :

rsync -av --inplace --no-whole-file /your/local/file.dat remoteserver:/your/directory/file.dat

Поэтому вы бы запустили это несколько раз, пока ваш файл 200 ГБ наполнять. Каждый раз, когда вы запускаете его, он постепенно обновляет удаленный файл. Это должно работать даже при случайном обновлении исходного файла. Может, ты сможешь запустить это каждые 15 минут. Затем, когда ваш pid заканчивается, вы будете запускать его еще раз, и это будет просто быстрая инкрементная дельта.

-121--83288-

Формулировка вашего вопроса неоднозначна, поэтому я не могу сказать, хотите ли вы прекратить использование zsh или вы хотите прекратить использование oh-my-zsh . Я прикрою обоих.

Отключение zsh

Просто запустите chsh и выберите любую оболочку, которая использовалась ранее. Если вы не знаете, какую оболочку вы использовали раньше, это почти наверняка bash . Эта команда изменяет «оболочку входа», связанную с вашим пользователем. По существу, она изменяет оболочку по умолчанию.

Чтобы изменения вступили в силу, необходимо открыть новое окно терминала. Если это не сработает, потребуется выйти из системы и снова войти в систему для повторной инициализации среды.

Отключение только oh-my-zsh

  1. Проверьте, существует ли ~/.zshrc.pre-oh-my-zsh . Наверное, так и есть. (Этот файл будет создан, когда сценарий установки oh-my-zsh переместит предыдущий файл .zshrc из пути. .zshrc является файлом запуска zsh , аналогично .bashrc для bash .)
  2. Если это так, выполните mv ~/.zshrc ~/.zshrc.oh-my-zsh . Это выведет oh-my-zsh -созданный .zshrc из пути, чтобы мы могли восстановить оригинал, выполнив mv ~/.zshrc.pre-oh-my-zsh ~/.zshrc .
  3. Если он не существует, откройте ~/.zshrc в текстовом редакторе. Найдите строку с текстом source $ ZSH/.oh-my-zsh и либо прокомментируйте ее, либо удалите. Это приведет к отключению инициализации oh-my-zsh .

Чтобы изменения вступили в силу, необходимо перезапустить оболочку.

19
27.01.2020, 19:48

Вы можете указать zsh загружать конфигурационные файлы для каждого пользователя из другого каталога, установив переменную окружения ZDOTDIR перед запуском zsh.

Если вы хотите запустить zsh без загрузки конфигурационных файлов, установите ZDOTDIR в несуществующую директорию. Если вы хотите пропустить файлы системной конфигурации (кроме /etc/zshenv), можно запустить zsh -f. Если вы хотите пропустить файлы системной конфигурации, но запустить файлы для каждого пользователя, запустите zsh -d.

Например, если вы хотите протестировать диск oh-my-zsh, не делая его установленным по умолчанию, не помещайте .zshrc из oh-my-zsh в ваш домашний каталог. Вместо этого поместите его куда-нибудь еще, например, в ~/.oh-my-zsh, а затем запустите ZDOTDIR=~/.oh-my-zsh zsh, когда захотите использовать oh-my-zsh.


Терминальные приложения запускают оболочку, на которую указывает переменная окружения SHELL. Если эта переменная не установлена, они запускают оболочку, указанную в пользовательской базе данных (/etc/passwd). При запуске эмулятора терминала можно запросить другое приложение, например xterm -e fish.

.
2
27.01.2020, 19:48

ZSH Config Switching

Если вы хотите протестировать различные фреймворки конфигурации zsh (oh-my-zsh, zprezto и т.д.) и переключаться между ними, лучше всего использовать символические ссылки для ~/. zsh, ~/.zshrc, ~/.zlogin, ~/.zlogout, ~/.zprofile, и ~/.zshenv. Вы можете создать скрипты оболочки для каждого фреймворка, чтобы создать эти симлинки для более быстрого переключения.

Положите свои конфигурации фреймворка в свои собственные папки. Для каждого фреймворка

  • Установите фреймворк в свою собственную папку, если это возможно, иначе
  • Если фреймворк принудительно установится в ~/.zsh, тогда
    • Сначала защитите ток ~/.zsh . Либо
      • удалите ~/.zsh симлинк; rm ~/.zsh, или
      • переместите папку ~/.zsh; mv ~/.zsh ~/.zsh. backup
    • Запустите установщик фреймворка.
    • Переместите папку фреймворка в свой каталог, например mv ~/.zsh ~/.oh-my-zsh.
  • Повторите для каждого фреймворка.

Как только это будет сделано, создать скрипт оболочки для каждого фреймворка, чтобы создать необходимые симлинки. Вот пример для zprezto, так как я его уже использую.

$ mkdir ~/bin
$ cat <<EOF > ~/bin/use-zprezto
#!/bin/bash
SYMLINKS=".zsh .zshrc .zshlogin .zshlogout .zshprofile .zpreztorc .zshenv .zshrc"
CONFIG_HOME="$HOME/.zprezto"

# check for unexpected error conditions
for sym in $SYMLINKS; do
   # report an error and quit if $sym exists and is not a symlink
   [[ -e "$HOME/$sym" -a ! -h "$HOME/$sym" ]] && { echo "error:  '$HOME/$sym' is not a symlink!"; return 1; }
done

# now create the symlinks now that nothing should go wrong
for sym in $SYMLINKS; do
   # remove old symlink if it exists
   [[ -h "$HOME/$sym" ]] && rm -f "$HOME/$sym"
   # create new symlink
   ln -s "$CONFIG_HOME/$sym" "$HOME/$sym"
done

# uncomment next line to start a new zsh shell.  CAUTION: each call is a zsh shell inside a zsh shell.  Too many calls will put you in limbo :D
#/usr/bin/env zsh
EOF

$ chmod 700 ~/bin/use-zprezto

Этот скрипт довольно прост и полагается на то, что все мои симлинки организованы по одному шаблону. Вы можете скопировать и вставить remove и создать строки после цикла для имеющихся у вас симлинков, которые не следуют шаблону.

После этого используйте ~/bin/use-zprezto-- или ~/bin/use-wevereverever- для переключения между zsh-фреймворками.

Обратите внимание, что изменения вступают в силу только в новых оболочках zsh, а не в существующих.

Переключение между оболочками

Это немного опасно, но если вы так наклоняетесь, вы можете использовать симлинк для команды оболочки и установить симлинк в качестве оболочки по умолчанию. Затем вы можете использовать скриптовый метод use-* выше, чтобы изменить вашу оболочку по умолчанию.

В качестве примера с zsh...

$ mkdir ~/bin
$ cat <<EOF > ~/bin/use-zsh
#!/bin/bash
# check for valid shell symlink
if [[ ! -h "$HOME/.shell" ]]; then
  echo "error: $HOME/.shell is not a symlink!"
  return 1
fi

# remove existing shell symlink if it exists
[[ -h "$HOME/.shell" ]] && rm -f "$HOME/.shell"

# create new shell symlink, but warn user if this fails!
if ! ln -s /usr/bin/zsh "$HOME/.shell"; then
  echo "ERROR: failed to create $HOME/.shell symlink.  Manually create the symlink or future logins will fail!."
  return 2
fi
EOF

$ chmod 700 ~/bin/use-zsh

Причина, по которой это опасно, заключается в том, что вы не можете войти под пользователем, если оболочка, хранящаяся в /etc/passwd, не является действительной программой. Поэтому вы можете заблокировать свою учетную запись, если не будете осторожны; т.е. ваша сим-ссылка ~/.shell разорвана или не указывает на интерактивную программу. Вы можете попробовать это с учетной записью пользователя, но это НЕ РЕКОМЕНДУЕТСЯ для Вашей учетной записи root.

Если вы все еще хотите продолжить, то

$ ~/bin/use-zsh         # ensures ~/.shell exists for chsh
$ echo "$HOME/.shell | sudo tee -a /etc/shells    # add symlink to system's list of valid shells
$ chsh -s ~/.shell      # changes default shell in /etc/passwd for $USER
4
27.01.2020, 19:48

chsh -s /bin/bash

Чтобы вручную установить новую оболочку по умолчанию, выполните chsh -s /my/ новый/оболочка, например, chsh -s /bin/bash. Затем просто снова откройте свои оболочки.

11
27.01.2020, 19:48

Поскольку это немного скрыто в @Gilles, ответьте на быстрый способ загрузки zsh без какой-либо конфигурации, например..zshrc.zshenv и т. д.

zsh -f

Это полезно, когда вы хотите проверить, не препятствует ли что-либо в вашей конфигурации работе некоторых функций zsh.

4
27.01.2020, 19:48

в моем случае я хотел отключить поведение ohmyzsh -только при монтировании nfs. Приглашение ohmyzsh (со статусом git )вызывало ужасные задержки. Но я не хотел отключать все настройки zsh из-за запуска с -f

С помощью ответа Жиля я сделал следующее:

  • создать каталог zsh
  • скопировал ~/.zprofileвzsh/.zshrc
  • отредактировал источник профиля ohmyzsh -вzsh/.zshrc
  • запустить новую оболочку сZDOTDIR=$HOME/zsh zsh

Теперь zsh загружается со всеми настройками и псевдонимами обычного.zprofile. Имейте в виду, что изменения в.zprofile не отражаются в zsh/.zshrc. При необходимости это должно быть решено с помощью include.

0
24.06.2020, 12:07

Теги

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