Получите многострочный вывод встроенного удара

Больше awk решение, которое (чистая) оболочка один, но здесь это так или иначе:

awk 'BEGIN{for(i=32;i<127;i++)printf "%c",i; print}'
6
01.08.2011, 03:36
2 ответа

Кажется, существует некоторая неоднозначность в способе, которым Вы сформулировали свой вопрос. Вы сказали:

но в сценарии только первый конец строки в переменной

и затем Ваши комментарии предполагают запись функции оболочки - не сценарий.

Я подозреваю, что Вы знаете, что сценарии бесполезны для изменения каталогов, начиная с любого cd в рамках сценария не распространяет к превосходящей оболочке. Если действительно Вы попытаетесь разработать свой преобразователь каталога в сценарии, то Вам будет нелегко, поскольку стопка каталога не наследована зависимыми оболочками:

$ dirs -l
/home/msw /home/msw/Ubuntu One /home/msw /usr/bin /usr/local /bin /usr/local
$ cat > dirs.sh
dirs -l 
$ bash dirs.sh
/home/msw

Вы могли заставить функцию выручать:

$ function passdirs() { bash ndirs.sh `dirs -l -p`; }
$ cat > ndirs.sh
echo $#
echo "$@"
$ passdirs
8
/home/msw /usr/local /usr/bin /bin /usr/local /usr/bin /bin /home/msw

но, конечно, Вам была бы нужна функция к, также производят cd в текущей оболочке, в этом случае переносящейся и разворачивающей аргументы через командную строку, тяжелая работа заключения в кавычки, таким образом, Вы лучше всего просто делаете все это в функции

$ function cd_pattern() {
   cd $(dirs -l -p | grep --max-count=1 -e "$1") ; dirs
}
$ dirs
~ /usr/local /bin /usr/share/doc/evince ~/Ubuntu One
$ cd_pattern v..c
/usr/share/doc/evince /usr/local /bin /usr/share/doc/evince ~/Ubuntu One

который также переключенный на использование $(...) как синоним для обратных галочек для сокращения беспорядка заключения в кавычки.

7
27.01.2020, 20:27
  • 1
    Вот еще, конечно! Я писал функцию для ~/.bashrc, но тестировал его... барабан... в сценарии. –  Alex B 07.09.2010, 08:46

Вывод команд может варьироваться в зависимости от того, выполняется ли он в интерактивном режиме или в рамках сценария. Например, "многострочный вывод" идет прекрасный с export:

#! /bin/bash
L=`export`
echo "$L"

, который дает Вам весь вывод все равно как тогда, когда Вы выполняете его в интерактивном режиме.

Но нет alias, который ничего не дает Вам.

0
27.01.2020, 20:27
  • 1
    Псевдонимы намеренно отключены в неинтерактивных сценариях: "псевдонимы не расширены, когда оболочка не интерактивная, если опция оболочки expand_aliases не установлена". Который Вы никогда не должны, вероятно, делать, поскольку это был бы большой вектор для использования. –  msw 07.09.2010, 06:31

Теги

Похожие вопросы