Источник канала управляет с каналом

Требуется скопировать список файлов из того же источника:

#!/bin/bash
Elements=('Helium' 'Aluminium' 'Argon') # Items to copy
Source='Hydrogen'  # Copy from this file

for x in "${Elements[@]}"; do 
  cp "$Source" "$x.element"
done

После которого я доберусь:

Aluminium.element Argon.element Helium.element

Они все совместно используют то же содержание Hydrogen

25
01.01.2015, 03:09
2 ответа

с источника (или . ) принимает файл в качестве аргументации, вы может попробовать:

source <(echo something)
40
27.01.2020, 19:40

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

arg=$(echo hi)

...бит echo в командной строке с выводом подоболочки, в случае подстановки процесса заменяет подоболочку на именованный файл - обычно /dev/fd/62 или что-то в этом роде - какую-то ссылку на файл-дизайнер. В цепочке файловый дескриптор равен 0, так что...

echo 'echo hi' | . /dev/fd/0

... /dev/stdin или что-то в этом роде должно прекрасно работать на любой Linux системе - и многие другие кроме того. Вы также можете использовать здесь-документы подобным образом:

. /dev/fd/3 3<<HI
$(echo 'echo hi')
HI

Вы можете проверить, как ваш оболочка обрабатывает подстановку, кстати:

(set -x; readlink <(:))

... которая печатает bash):

+ set +x
+ readlink /dev/fd/63
++ :
pipe:[2212581]

... и таким образом мы видим, что оболочка делает подстановку и readlink читает из анонимной трубки, которая открывается на файл-диспетчере 63.

8
27.01.2020, 19:40

Теги

Похожие вопросы