У меня есть одна линия, которую я хочу вызвать с помощью псевдонима.
while printf '%s ' "$(df -P / | awk 'NR==2 { print $(NF-1) }')"; do sleep 30; done
Я пытался сбежать '
, \'
но не вышло.
Какой правильный синтаксис следует использовать для однострочного использования псевдонима?
решение1
alias my_du=$'while printf \'%s \' "$(df -P / | awk \'NR==2 { print $(NF-1) }\')"; do sleep 3; done'
Вы можете проверить результат с помощью
alias my_du
Если вместо или $()
заключено в кавычки , то оно подставляется, и результат, а не предполагаемый вызов программы, становится частью определения псевдонима."
'
\
решение2
Хотя это можно преобразовать в псевдоним, функции, как правило, предпочтительнее. Из man bash
:
Почти для всех целей псевдонимы заменяются функциями оболочки.
Ваш псевдоним в форме функции:
my_du() {
while printf '%s ' "$(df -P / | awk 'NR==2 { print $(NF-1) }')"
do
sleep 30
done
}
Это более читабельно и, следовательно, более удобно в поддержке.
решение3
Вы не можете экранировать одинарные кавычки, пока они находятся в одинарных кавычках, потому что \
в контексте одинарных кавычек это воспринимается буквально. Либо закройте одинарные кавычки перед экранированием, либо, что лучше, используйте двойные кавычки.
alias my_du="while printf '%s ' \"\$(df -P / | awk 'NR==2 { print \$(NF-1) }')\"; do sleep 30; done"
решение4
Если вам нужны команды, которые принимают аргументы или взаимодействуют каким-либо образом со своей средой, используйте функции. По крайней мере в bash псевдонимы раскрываются при определении, онимощьдействуют так, как будто они принимают аргументы или используют переменные. Иногда. Закон Мерфи гарантирует, что это не сработает, когда это действительно необходимо.