Как использовать ' в псевдониме?

Как использовать ' в псевдониме?

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

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 псевдонимы раскрываются при определении, онимощьдействуют так, как будто они принимают аргументы или используют переменные. Иногда. Закон Мерфи гарантирует, что это не сработает, когда это действительно необходимо.

Связанный контент