псевдоним zsh с линией, запятыми и кавычками

В моем zshrc у меня есть псевдоним вроде этого:

alias sl='screen -list' 

Это соответствует моей потребности (видя, на каких экранах у меня работает), но результат довольно уродлив:

 [pts/7]~% sl There are screens on: 32765.quotes-api (04/26/2015 11:09:18 AM) (Detached) 5055.gitsync-test (04/07/2015 09:24:04 PM) (Detached) 15074.gitsync-interceptor (03/31/2015 10:39:45 AM) (Detached) 4662.eloquent-api (03/29/2015 11:37:26 AM) (Detached) 16177.Dropbox (03/17/2015 03:53:44 PM) (Detached) 18803.gitsync-todo-api-py (03/06/2015 08:21:24 AM) (Detached) 796.website (01/31/2015 01:56:02 PM) (Detached) 7874.gitsync-optionals (01/29/2015 02:27:24 PM) (Detached) 28474.linkbag (12/16/2014 09:56:39 AM) (Detached) 10839.datapump (10/13/2014 02:16:26 PM) (Detached) 5118.resr-api-python (09/13/2014 12:28:33 PM) (Detached) 7619.dataglobbing (09/03/2014 08:34:13 PM) (Detached) 10583.rest-api-dataglobbing (09/03/2014 01:06:21 AM) (Detached) 11705.save-functions (08/12/2014 01:00:58 PM) (Detached) 14 Sockets in /var/run/screen/S-tuvokki. 

Поэтому я начал форматировать это и получил следующую любопытную работу:

  screen -list|grep -v There|grep -v Sockets|awk 'BEGIN { format = " %-35s %-10s %s\n" printf format, "Name", "Active", "Status" printf format, "----", "------", "------" } { printf format, $1, $2, $5 }' 

Но как мне помещать это в псевдоним, как простая команда, которую я имел раньше?

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

  • Почему эта команда ffmpeg работает в bash, а не zsh?
  • Локальные `set -e` для функций
  • Используйте `/ etc / paths` или` / etc / paths.d` для добавления элементов в PATH в macOS Sierra?
  • Почему $ COLUMNS не отображается ни в env, ни в наборе? (по zsh)
  • строковые подстановки: все вхождения
  • Вкладка вкладок вручную в zsh
  • сделать мой режим отображения zsh в режиме vi
  • Можно ли вручную вызвать функцию завершения zsh?
  • One Solution collect form web for “псевдоним zsh с линией, запятыми и кавычками”

    Есть три способа решить эту проблему.

    Один: просто используйте функцию. псевдонимы для простых текстовых макросов, то, что ваш второй пример нет.

     sl() { screen -list|grep -v There|grep -v Sockets|awk 'BEGIN { format = " %-35s %-10s %s\n" printf format, "Name", "Active", "Status" printf format, "----", "------", "------" } { printf format, $1, $2, $5 }' } 

    Два: используйте виджет quote-line чтобы правильно избежать всей команды

     # type the entire command out like you would interactively. % screen -list|grep -v There|grep -v Sockets|awk 'BEGIN { format = " %-35s %-10s %s\n" printf format, "Name", "Active", "Status" printf format, "----", "------", "------" } { printf format, $1, $2, $5 }' # use quote-line which transform the line into: % 'screen -list|grep -v There|grep -v Sockets|awk '\''BEGIN { format = " %-35s %-10s %s\n" printf format, "Name", "Active", "Status" printf format, "----", "------", "------" } { printf format, $1, $2, $5 }'\''' # prepend alias sl= to the newly escaped line: % alias sl='screen -list|grep -v There|grep -v Sockets|awk '\''BEGIN { format = " %-35s %-10s %s\n" printf format, "Name", "Active", "Status" printf format, "----", "------", "------" } { printf format, $1, $2, $5 }'\''' 

    И Три: просто используйте функцию. псевдонимы для простых текстовых макросов.

     sl() { screen -list|grep -v There|grep -v Sockets|awk 'BEGIN { format = " %-35s %-10s %s\n" printf format, "Name", "Active", "Status" printf format, "----", "------", "------" } { printf format, $1, $2, $5 }' } 

    Пример awk также не зависит от новых строк, но вам нужно ; для разделения нескольких операторов в одной строке.

     screen -list|grep -v There|grep -v Sockets|awk 'BEGIN { format = " %-35s %-10s %s "; printf format, "Name", "Active", "Status"; printf format, "----", "------", "------" } { printf format, $1, $2, $5 }' 

    Будет работать.

    Linux и Unix - лучшая ОС в мире.