Если вы хотите запустить эти строки без написания отдельного файла сценария, вам нужно заключить команды в двойные кавычки и экранировать любой символ, который может противоречить этому. Например:
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
)"
Последний вариант имеет недостаток в использовании большего количества строк, но он не требует, чтобы вы что-то меняли в ваших командах.
Попробуйте добавить |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
вызывает у меня дискомфорт.
Глядя на исходный файл, кажется, что этот скрипт запускается 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, так что вы можете его разветвить или попросить автора сделать это.