Что делает top -M -n 1
? В моей системе -M
является недопустимой опцией. Я предполагаю, что вы пытаетесь получить количество используемой памяти в системе (в мегабайтах)? В таком случае, используйте free
, а не top
- извлекать данные из приложения ncurses с помощью top
глупо, когда для этого есть такие инструменты, как free
.
В любом случае, я собираюсь использовать free -m
в моем примере сценария.
В развитие работы Archemar по устранению лишних команд grep и awk:
mem=$(free -m | awk '/Mem:/ {print $3}')
if [ "$mem" -gt 1024 ] ; then (
echo "Memory utilisation is high"
echo "Please find history of the memory utilisation below"
sar -r | awk '{print $1,$2,$3,$4}' | column -t
) >>/home/shyam/utilisation.txt
fi
Вместо того чтобы использовать awk
для выполнения всей работы, он использует awk
только для извлечения данных об использовании памяти из вывода free -m
, а затем использует shell-код для выполнения остальной работы. Он запускает echo
и sar | awk
внутри под-оболочки, при этом весь вывод под-оболочки перенаправляется в utilisation. txt
Если в вашей системе нет free
и top -M -n 1
работает для вас, то используйте это в качестве первой строки:
mem=$(top -M -n1 | awk '/Mem/ {print $7}')
Вариант 1)
Вы можете выбрать опцию Match (см. man ssh _config)
Match Host example.com exec "test $_ = /usr/bin/ssh"
RemoteCommand tmux a; or tmux
RequestTTY yes
Это будет различать только разницу между ssh и sftp
Вариант 2
Вы создаете некоторую конфигурацию-заполнитель для своей команды diffe, например:
Host tmux.example.com
HostName example.com
HostKeyAlias example.com
RemoteCommand tmux a; or tmux
RequestTTY yes
И после этого вы все еще можете использовать example.com для использования sftp / ping.
Я использую что-то более сложное, имеющее дело с параметрами ssh и пробелами в аргументах:
Match exec "POSIXLY_CORRECT=1 xargs -0 getopt -o 46AaCfGgKkMNnqsTtVvXxYyB:b:c:D:E:e:F:I:i:J:L:l:m:O:o:p:Q:R:S:W:w: -- </proc/$PPID/cmdline | perl -pe 's|.*? -- ||' | { read -r c; eval a=($c); [ ${#a[@]} -le 2 ]; }"
RemoteCommand my-command-here
RequestTTY yes
Кроме того, если кто-то хочет использовать RemoteCommand для некоторых машин (, например, внутри «host xxxx» ), тот же трюк можно использовать в обратной логике (совпадение оценивается после хоста):
Match exec "POSIXLY_CORRECT=1 xargs -0 getopt -o 46AaCfGgKkMNnqsTtVvXxYyB:b:c:D:E:e:F:I:i:J:L:l:m:O:o:p:Q:R:S:W:w: -- </proc/$PPID/cmdline | perl -pe 's|.*? -- ||' | { read -r c; eval a=($c); [ ${#a[@]} -gt 2 ]; }"
RemoteCommand none
RequestTTY auto
Host machine1 machine2...
RemoteCommand my-command-here
RequestTTY yes
Если кому-то интересно, сейчас я использую RemoteCommand для вызова экрана:
RemoteCommand which screen &>/dev/null && TERM=xterm screen -q -RR "%u-%C" $SHELL -l || $SHELL -l