LINUX.ORG.RU
ФорумTalks

Нестандартные шеллы


0

0

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

В обычной юниксовой оболочке каждой следущей команде в цепочке приходится парсить вывод предыдущей, это не очень удобно.
Как вывести файлы в текущей директории, которые имеют размер от 120 до 200 байт, отсортированный по дате изменения, но так чтоб выводились только права и имена, например, но не городя лишнего кода?

В bash и zsh так вроде бы нельзя... Но насколько мне известно, есть оболочки, в которых такое делается достаточно просто. Какие оболочки с нестандартными решениями для таких случаев известны? Обязательно свободные и кроссплатформенные, pash заброшен и на mono, его не предлагать.

★★★★★

Все это красноглазый трэш. Windows Powershell - единственное адекватное решение как раз для таких случаев. Между командами в конвеере передаются объекты, а не просто текст, который надо еще предварительно распарсить.

Deleted ()

>Как вывести файлы в текущей директории, которые имеют размер от 120 до 200 байт, отсортированный по дате изменения, но так чтоб выводились только права и имена, например, но не городя лишнего кода?

Какой код считается лишним? Комбинация из find/sort/ls/awk чем не нравится?

xetf ★★ ()

Интерактивные — в смысле чтоб там было достаточно удобное автодополнение, история команд и прочие вкусности. И запуск, скажем, программы из $PATH должен выглядеть так же как в обычном *sh, если в оболочке нет такой built-in, а не как нагромождения типа system.command(«somecommand --some option»)

Xenius ★★★★★ ()

Ты хочешь неправильного. Вся сила юникса — в цепочках команд. Тренируй слепой метод печати и мозг.

annoynimous ★★★★★ ()
Ответ на: комментарий от Xenius

Можно конкретнее, чего не хватает в bash/zsh?

xetf ★★ ()
Ответ на: комментарий от xetf

> Какой код считается лишним? Комбинация из find/sort/ls/awk чем не нравится?
Лишний — которые делает то что уже делалось раньше, скажем ls -l `find something` — двойное обращение к файловой системе

Xenius ★★★★★ ()
Ответ на: комментарий от bibi

> Тогда уж irb. Мой любимый калькулятор.
А там есть pipes? А автодополнение?

Xenius ★★★★★ ()
Ответ на: комментарий от Xenius

> Ну всё равно получится что awk парсит вывод ls. А в некоторых оболочках можно без этого.

тебе чего жалко, процессорного времени?

name_no ★★ ()
Ответ на: комментарий от Artificial_Thought

> ipython =)
Пробую, включил объктные трубы. Но как-то код не очень красиво выглядит со скобками и кавычками:
iwalk | ifilter(«_.endswith('.pyc')») | idump

А много там команд, поддерживающих объектные пайпы? Больше чем в PS?

А ещё мне не нравится, что в конфиге в комментах виндузятность:

n# Configure your favourite editor?
# Good idea e.g. for %edit os.path.isfile

#import ipy_editors

# Choose one of these:

#ipy_editors.scite()
#ipy_editors.scite('c:/opt/scite/scite.exe')
#ipy_editors.komodo()
#ipy_editors.idle()
# ... or many others, try 'ipy_editors??' after import to see them
Почему нет nano и надо самому вписывать, а какой-то scite.exe есть?

Xenius ★★★★★ ()
Ответ на: комментарий от Xenius

>> тебе чего жалко, процессорного времени?

Интересно поэкспериментировать с другими подходами.

создай концепцию и прототип. экспериментируй. от этого будет максимум пользы.

name_no ★★ ()

Re: Нестандартные шеллы

То что есть — алфавитное письмо, а то что ты хочешь — иероглифическое письмо. Выводы делаем сами.

sdio ★★★★★ ()
Ответ на: комментарий от Artificial_Thought

Кстати, а как на ipython решить задачу, указанную в топике? Всё остальное получилось, но с idump не разобрался чтоб вывести только нужные поля. Ещё не понял, как сделать что-то вроде head/tail

Xenius ★★★★★ ()
#!/bin/sh

min_size=120
max_size=125
let start=($min_size - 5)
let end=($max_size + 5)

# Generate some files
for i in `seq $start $end`; do
    name=$i.txt
    if [ ! -f $name ]; then
        dd if=/dev/zero of=$i.txt bs=1 count=$i 2>/dev/null
        sleep 1
    fi
done

# Just for info
find . -type f -name \*.txt \( -size +${min_size}c -and -size -${max_size}c \) -printf "%t|%p|%M\n"

# Real output
find . -type f -name \*.txt \( -size +${min_size}c -and -size -${max_size}c \) -printf "%t|%p|%M\n" | \
sort | sed -e "s/\(.*\)|\(.*\)|\(.*\)/\2 \3/"

#rm -f *.txt
$ ./test01.sh
Thu Jan 14 21:21:52 2010|./123.txt|-rw-rw-r--
Thu Jan 14 21:21:53 2010|./124.txt|-rw-rw-r--
Thu Jan 14 21:21:50 2010|./121.txt|-rw-rw-r--
Thu Jan 14 21:21:51 2010|./122.txt|-rw-rw-r--
./121.txt -rw-rw-r--
./122.txt -rw-rw-r--
./123.txt -rw-rw-r--
./124.txt -rw-rw-r--

Дальше сам поправишь как тебе нужно.

bibi ()
Ответ на: комментарий от Xenius

>>> вывести файлы в текущей директории, которые имеют размер от 120 до 200 байт, отсортированный по дате изменения, но так чтоб выводились только права и имена, например, но не городя лишнего кода?

Какой код считается лишним? Комбинация из find/sort/ls/awk чем не нравится?

Лишний — которые делает то что уже делалось раньше, скажем ls -l `find something` — двойное обращение к файловой системе

тогда вывод ls -lt обработать sed-ом.

Если нужны ограничения на размер, то либо всё равно придётся фильтровать файлы, которые должен выводить ls (тогда какая разница, будет их фильтровать find или шелл?), либо пользоваться стандартным ls и вырезать ненужное из его вывода, либо искать замену ls. Последнее я даже где-то видел.

question4 ★★★★★ ()

Очень жаль что pash заброшен - альтернативы под не windows системы ему просто нет, а Power Shell очень удобен.

Orlangoor ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.