2016-12-21 17 views
0

У меня есть Баш скрипт, который обычно работает следующим образом:Подставив команду в списке параметров другой команды в Баш

[...] 
file=$1 
docommand $x $y $file $z 

, но я хотел бы добавить опцию в сценарий, который бы сказать его получить данные из команды, используя anonymous named pipe вместо файла. Т.е., я хотел бы сделать что-то аппроксимирующих

file=<(anothercmd arg1 $1 arg3) 

и есть мой

docommand $x $y $file $z 

расширить до

docommand $x $y <(anothercmd arg1 $1 arg3) $z 

Есть ли способ, чтобы получить право квотирование для достижения этой цели ?

Для более конкретного контекста сценарий рассматривает выходные продукты из регрессионных тестов, как правило, отличает их от файла с ожидаемым выходом. Я хотел бы дополнительно передать ревизию и разбить на ожидаемый результат, поэтому diff $from $to будет расширяться до diff <(hg cat -r $fromrev $from) $to.

+0

"анонимный именованный канал" ... это не то, что смешное имя? –

+0

Правильный термин - * замещение процесса *. Какая у вас проблема с цитированием? Правила цитирования ничем не отличаются от замены процесса в другом месте. – cdarke

+1

Я не думаю, что вы можете это сделать. Именованный канал, используемый для замещения процесса, является временным и уходит в конце командной строки, где он используется. – Barmar

ответ

1

Использование Eval:

eval docommand $x $y <(anothercmd arg1 $1 arg3) $z 

пример

$ f='<(ps)' 
$ echo $f 
<(ps) 
$ cat $f 
cat: '<(ps)': No such file or directory 
$ eval cat $f 
    PID TTY   TIME CMD 
4468 pts/8 00:00:00 mksh 
4510 pts/8 00:00:00 bash 
4975 pts/8 00:00:00 bash 
4976 pts/8 00:00:00 cat 
4977 pts/8 00:00:00 ps 
$ 
+0

Я хочу обратить внимание на одинарные кавычки при определении 'f' как процесса. Это отлично работает для моего случая, потому что 'eval cat $ f' также будет работать без изменений для простого файла, например' f = ~/.bashrc'. –

+0

Могут быть соображения безопасности, чтобы думать о том, является ли имя файла аргументом командной строки. –

 Смежные вопросы

  • Нет связанных вопросов^_^