To działało, dziękuję. I szczęśliwego Nowego Roku!
Desmond Hume,
@muru To działa świetnie. Zauważ, że "| source / dev / stdin" wygląda na działające, ale faktycznie upuści wszystkie przypisania zmiennych. Nie pewny dlaczego. Wydaje się solidny w teorii. To szaleństwo.
Dustin Oprea
2
Potoki @DustinOprea tworzą podpowłokę, więc wszystkie te przypisania zmiennych nigdy nie wpływają na powłokę nadrzędną.
mur
8
Twoje polecenie źródłowe wymaga argumentu pliku. Możesz to uzyskać w niektórych powłokach z podstawieniem procesu, a to dlatego, że w ten sam sposób powłoka zastępuje ...
arg=$(echo hi)
... echobit w wierszu poleceń z wyjściem podpowłoki, w przypadku podstawienia procesu zastępuje podpowłokę nazwanym plikiem - zwykle /dev/fd/62lub czymś - linkiem do deskryptora pliku. W przypadku potoku deskryptor pliku wynosi 0, więc ...
echo 'echo hi'|./dev/fd/0
... /dev/stdinlub cokolwiek by nie było, powinno działać dobrze na każdym systemie linux - i wielu innych oprócz. Możesz także użyć tutaj dokumentów w podobny sposób:
./dev/fd/33<<HI
$(echo 'echo hi')
HI
Możesz sprawdzić sposób, w jaki twoja powłoka radzi sobie z podstawieniem procesów, w następujący sposób:
(set-x; readlink <(:))
... który drukuje (w bash) :
+set+x
+ readlink /dev/fd/63++:
pipe:[2212581]
... i widzimy, że powłoka dokonuje podstawienia i readlinkczyta z anonimowego potoku, który otwiera na deskryptorze pliku 63.
Twoje polecenie źródłowe wymaga argumentu pliku. Możesz to uzyskać w niektórych powłokach z podstawieniem procesu, a to dlatego, że w ten sam sposób powłoka zastępuje ...
...
echo
bit w wierszu poleceń z wyjściem podpowłoki, w przypadku podstawienia procesu zastępuje podpowłokę nazwanym plikiem - zwykle/dev/fd/62
lub czymś - linkiem do deskryptora pliku. W przypadku potoku deskryptor pliku wynosi 0, więc ......
/dev/stdin
lub cokolwiek by nie było, powinno działać dobrze na każdym systemie linux - i wielu innych oprócz. Możesz także użyć tutaj dokumentów w podobny sposób:Możesz sprawdzić sposób, w jaki twoja powłoka radzi sobie z podstawieniem procesów, w następujący sposób:
... który drukuje (w
bash
) :... i widzimy, że powłoka dokonuje podstawienia i
readlink
czyta z anonimowego potoku, który otwiera na deskryptorze pliku 63.źródło