#!/bin/sh
gedit $( find -name "$1" )
[116225]$(get_krb)[116226] расширяется в момент этого назначения, в то время как вы хотите, чтобы оно расширялось при каждом запросе через [116227]prompt_subst[116228]. Итак:
Это ошибка в вашем скрипте. Используйте тройник
, если вы хотите дублировать данные, которые могут быть прочитаны только один раз. Как объясняется в другом ответе, <(cmd) создает канал и помещает / dev / fd / 62
или аналогичный в командной строке:
echo <(true)
/dev/fd/63
Другой альтернативой tee
является here-string:
cmd <<<"$text"
Если вы хотите, чтобы bash создавал tmp-файл с возможностью поиска и перенаправлял ввод из него. (Я не совсем уверен, как бы вы перемотали stdin в начало файла внутри вашей функции. Я думаю, что cat / dev / stdin
может просто получить ту же позицию в файле.)
В дополнение к предложению @Peter Cordes использовать tee
вместо попытки дважды прочитать файл (/ pipe), вот возможная перезапись функции:
bugless_part() {
tee sample.first >sample.second <"$1"
}
При запуске как bugless_part <(echo "TEST")
, он помещает "TEST" в оба файла.
Я не думаю, что это ошибка. Вы можете читать / писать в именованный канал, подключенный к командам, подготовленным процессом подстановки , только один раз.