Ранее я использовал source
команду, как это:
source file_name
Но то, что я пытаюсь сделать, это:
echo something | source
Который не работает.
Поскольку source
(или .
) принимает файл в качестве аргумента, вы можете попробовать:
source <(echo something)
Ваша исходная команда требует аргумент файла. Вы можете получить это в некоторых оболочках с подстановкой процесса, и это происходит потому, что оболочка аналогичным образом заменяет ...
...
echo
бит в командной строке с выводом подоболочки, в случае замены процесса он заменяет подоболочку именованным файлом - обычно/dev/fd/62
или чем-то - какой-либо ссылкой на дескриптор файла. Для канала дескриптор файла равен 0, так что ......
/dev/stdin
или что-то еще, в зависимости от обстоятельств, должно прекрасно работать на любой системе Linux - и многих других. Вы также можете использовать здесь документы аналогично:Вы можете проверить, как ваша оболочка обрабатывает подстановку процессов, например:
... который печатает (в
bash
) :... и поэтому мы можем видеть, что оболочка выполняет подстановку и
readlink
читает из аномального канала, который она открывает в дескрипторе файла 63.источник