Нужен оптимальный код для .zshrc для исходного файла после curl

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

ssh your-host "
df -lh | awk '{if (\$5 >= 20) { print \$6 \"  \" \$2 \"   \"  \$3  \"  \" \$5 }}'
top -b -n1 | grep \"Cpu(s)\" | awk '{print 100 - \$5}'"

Или используя одинарные кавычки:

ssh your-host'
df -lh | awk '"'"'{if ($5 >= 20) { print $6 "  " $2 "   "  $3  "  " $5 }}'"'"'
top -b -n1 | grep "Cpu(s)" | awk '"'"'{print 100 - $5}'"'"

Или используя here-document:

ssh your-host "$(cat << 'END'
df -lh | awk '{if ($5 >= 20) { print $6 "  " $2 "   "  $3  "  " $5 }}'
top -b -n1 | grep "Cpu(s)" | awk '{print 100 - $5}'
END
)"

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

2
05.11.2018, 04:04
2 ответа

Попробуйте добавить |cat. Это способ принудительного ожидания процессов, запущенных в фоновом режиме. catфактически будет ждать их, ожидая окончания ввода. Это работает, потому что эти фоновые процессы поддерживают чтение канала catоткрытым (до тех пор, пока их стандартный вывод не перенаправляется ). Так:

curl -sL --proto-redir -all,https https://raw.githubusercontent.com/zplug/installer/master/installer.zsh | zsh | cat

Такого же эффекта можно добиться с помощью:

: $(curl -sL --proto-redir -all,https https://raw.githubusercontent.com/zplug/installer/master/installer.zsh | zsh)

Все еще канал, но на этот раз созданный zshдля подстановки команд.

Не могу не упомянуть, что выполнение подобного чужого кода как части вашего ~/.zshrcвызывает у меня дискомфорт.

1
27.01.2020, 22:08

Глядя на исходный файл, кажется, что этот скрипт запускается git clone https://github.com/zplug/zplug.git $ZPLUG_HOMEв фоновом режиме через функцию execute()и, не дожидаясь завершения этого процесса, объявляет сообщение SUCCEEDEDи завершает работу.

В основном у вас есть два варианта:

  • подождите, пока скрипт создаст файл, например, добавив цикл while, что-то вроде

    while [[ ! -f ~/.zplug/init.zsh ]]; do
       sleep 1
    done
    

    Проверьте свою sleepреализацию, если она поддерживает числа с плавающей запятой, попробуйте sleep 0.1, если время является проблемой, или даже подождите с inotify, чтобы быть немного (незначительно )более эффективным.

  • измените этот сценарий установки, чтобы он ожидал внутренних заданий. Он находится на git, так что вы можете его разветвить или попросить автора сделать это.

1
27.01.2020, 22:08

Теги

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