LINUX.ORG.RU

bash дописывать всем командам по маске агрументы

 ,


0

2

Хочется написать такой rc файлик, загрузив который, интерактивный шелл автоматом будет подставлять аргументы введённым командам.

В идеале, список команд должен быть конфигурябельным хотя бы по wildcard'ам, а лучше по регекспам.

типо так:

source .additionalrc
cmd-prefix-do-something asd dsa
#actually cmd-prefix-do-something asd dsa --ololo="piw piw" -a 100500

★★★★★
Ответ на: комментарий от Kroz

Плюсую, но ТС хочет это типа:

alias 100500commands="команда команда2 прочая_команда"

И шоб это автоматом подставлялось всем 100500commands.

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

Не понимаю. Такое?

$ ls2(){ echo "Listing $*";  ls $*; }
$ ls2 docs tmp
Listing docs tmp
docs:
abs

tmp:
1.txt  2.txt  abs-guide-flat.tar.gz  test
Если нет - приведи что хотелось бы писать, и эквивалентно чему оно должно работать.

Kroz ★★★★★
()
Ответ на: комментарий от Kroz
#for example  for git-* add --help parameter
git-clone #will print help
git-commit -a #will print help
git-stash-pop #will print help

Вообщем нужно рекурсивный алиас для набора комманд удовлетворяющих регэкспу/вайлдкарду.

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

Ну, типа такого:

$ regexprun(){ CMDS=$1; shift ; for C in $CMDS ; do $C "$@" ; done }
$ regexprun "/bin/zf*" --help
Первый параметр - маска для команд (см. ниже), остальные - параметры, которые будут подставляться каждой команде.

Минусы: - первый параметр - маска для файлов. То есть с полным путем. - что первый параметр длжен быть в двойных кавычках

Оба минуса устранимы, если это то, что тебе нужно.

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

ммм, не, видимо я криво обьясняю, вот псевдо код в bashrc:


commands_list=$(get_cmds_for_wrapping)

for cmd in $commands_list do
    alias $cmd="$cmd $default_args";
done

потом этот rc файл просто загружается и часть параметров (например дефолтный хостнейм/юзернейм) беруться из default_args:

bash
export default_args=--help
source wtfrc
some-command #actually some-command --help
exit #back all to norm

Вообщем я хочу интерактивный шелл, который за меня дописывает аргументы для набора команд.

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

А что мешает поместить это в .bashrc?

for i in ls mv cp
 do
   x=my$i
   alias $x="echo $i"
 done

После запуска .bashrc с такой вставкой появятся алиасы myls, mymv и mycp, просто выводящие слова ls, mv и cp на экран, ну и всё, что за ними. А просто регулярное выражение типа .* подставить, естественно, не получится, бо нужен список, по которому его парсить. Хотя можно взять из /bin (или где там лежат эти команды?) Тогда получится как-то так:

for i in `ls /bin/* | sed 's/.*\///'`
 do
   x=my$i
   alias $x="echo $i"
 done
aureliano15 ★★
()
Ответ на: комментарий от pon4ik

Так какая разница? Это я для примера my поставил. Можно не my, а что-то др. Можно не префикс, а суффикс. Можно, по-моему, вообще без префиксов-суффиксов, просто заменить команду алиасом (но точно не помню.)

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

И, кстати, можно не добавлять, а убирать подстроки тем же sed'ом.

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

а алиасы в рекурсию не могут, как я понял.

Чегой-то не могут?

$ alias x="date"
$ x
Ср апр 15 23:06:45 MSK 2015
$ alias date="ls"
$ x
123  снимок2.png
ziemin ★★
()
Ответ на: комментарий от ziemin

а если так:

alias ls='ls -al'

Upd. сам написал, в итоге попробовал - пашет. Ну тогда можно сказать решение найденно :)

pon4ik ★★★★★
() автор топика
Последнее исправление: pon4ik (всего исправлений: 1)

напиши префикс-функцию которая все сделает
запускать типа как sudo command ...

назови её: My dynamicly adopted command сокращенно mydac

$ mydac anycommand ...

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