Таки решено! Алиас в tcsh

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

avi
Сообщения: 4

Таки решено! Алиас в tcsh

Сообщение avi »

Здравствуйте!
Хочу перевести слово star dict'ом, результат дописать к файлу:

Код: Выделить всё

alias sd    "sdcv -n >> file_name"

%sd any_word
Получаем файл со словарной статьёй Мюллера.
Хочу сразу смотреть этот файл:

Код: Выделить всё

 alias sd    "sdcv -n >> file_name && vim file_name"

Не выходит: шелл ничего не выдаёт, вим сидит в процессах, по ctrl-c открывается в виме открывается пустой файл. Буду признателен за любой совет.
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Таки решено! Алиас в tcsh

Сообщение ZyX »

Я не знаю tcsh, но если связки работают там так же, то последующие аргументы просто дописываются к команде, т.е. в первом случае будет запущена команда sdcv -n >> file_name {arguments}, во втором sdcv -n >> file_name && vim file_name. Tcsh, как и zsh, видимо, поддерживает указание перенаправлений в любом месте командной строки, поэтому первая команда эквивалентна sdcv -n {arguments} >> file_name и нормально работает. Но во втором случае дополнительные аргументы получает vim, а не sdcv, поэтому сначала вы видите sdcv, которая, вероятно, в отсутствии слова, введённого из командной строки, ожидает его из стандартного ввода (её вы завершаете по <C-c>), а потом vim, который словил все остальные аргументы.
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Таки решено! Алиас в tcsh

Сообщение ZyX »

ZyX писал(а):
28.03.2011 23:40
Я не знаю tcsh, но если связки работают там так же, то последующие аргументы просто дописываются к команде, т.е. в первом случае будет запущена команда sdcv -n >> file_name {arguments}, во втором sdcv -n >> file_name && vim file_name. Tcsh, как и zsh, видимо, поддерживает указание перенаправлений в любом месте командной строки, поэтому первая команда эквивалентна sdcv -n {arguments} >> file_name и нормально работает. Но во втором случае дополнительные аргументы получает vim, а не sdcv, поэтому сначала вы видите sdcv, которая, вероятно, в отсутствии слова, введённого из командной строки, ожидает его из стандартного ввода (её вы завершаете по <C-c>), а потом vim, который словил все остальные аргументы.

В этих рассуждениях уже вижу две ошибки:
  • В случае zsh, Vim не выполниться после <C-c>, потому что предыдущий процесс завершится с ошибкой (если только sdcv не ловит и не обрабатывает <C-c> самостоятельно).
  • В случае zsh, Vim не должен висеть в процессах пока предыдущий процесс не выполнен.

Спасибо сказали:
avi
Сообщения: 4

Re: Таки решено! Алиас в tcsh

Сообщение avi »

Конечно, утешает даже сама возможность этого:
avi писал(а):
28.03.2011 11:01

Код: Выделить всё

alias sd    "sdcv -n >> file_name"
%sd any_word
Получаем файл


Вообще, это напоминает задачу о запуске поиска в гугле из шелла.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Таки решено! Алиас в tcsh

Сообщение t.t »

avi писал(а):
29.03.2011 12:22
%sd any_word

Стоп, так Вы именно так и вызываете? Тогда и не должно работать.

В первом случае получается так:

Код: Выделить всё

sdcv -n >> file_name any_word

Во втором -- так:

Код: Выделить всё

sdcv -n >> file_name && vim file_name any_word


Т.е. здесь уже алиас не подходит, нужна функция. Синтаксис tcsh не знаю, в bash это бы выглядело так:

Код: Выделить всё

sd () {
  sdcv -n $1 >> file_name && vim file_name
}
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
avi
Сообщения: 4

Re: Таки решено! Алиас в tcsh

Сообщение avi »

t.t писал(а):
29.03.2011 12:34
avi писал(а):
29.03.2011 12:22
%sd any_word
Стоп, так Вы именно так и вызываете?


Именно так.

Т.е. здесь уже алиас не подходит, нужна функция.

Мне, собственно, это и советовали, но:
/dev/random писал(а):
16.11.2009 12:48
...как выяснилось, пишут целые скрипты...

Спасибо сказали:
avi
Сообщения: 4

Re: Таки решено! Алиас в tcsh

Сообщение avi »

Вдруг понадобится кому.

Код: Выделить всё

alias  sd       'sdcv -n "*\!:1*" >> file_name && vim file_name'

$sd слово_на_аглицком

Получаем vim со всеми дописанными переводами.
Спасибо сказали: