Как импортировать псевдонимы из файла?

Он работает .

Различные части конвейера выполняются одновременно. Единственное, что синхронизирует/сериализует процессы в конвейере, — это ввод-вывод, то есть один процесс записывает в следующий процесс в конвейере, а следующий процесс читает то, что пишет первый. Кроме того, они выполняются независимо друг от друга.

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

С тем же успехом можно было написать

time ( foo.sh & bar.sh &; wait )

Тердон разместил пару немного измененных примеров скриптов в чате:

#!/bin/sh
# This is "foo.sh"
echo 1; sleep 1
echo 2; sleep 1
echo 3; sleep 1
echo 4

и

#!/bin/sh
# This is "bar.sh"
sleep 2
while read line; do
  echo "LL $line"
done
sleep 1

Вопрос был "почему time ( sh foo.sh | sh bar.sh )возвращает 4 секунды, а не 3+3 = 6 секунд?"

Чтобы увидеть, что происходит, включая примерное время выполнения каждой команды, можно сделать это (вывод содержит мои аннотации):

$ time ( env PS4='$SECONDS foo: ' sh -x foo.sh | PS4='$SECONDS bar: ' sh -x bar.sh )
0 bar: sleep 2
0 foo: echo 1     ; The output is buffered
0 foo: sleep 1
1 foo: echo 2     ; The output is buffered
1 foo: sleep 1
2 bar: read line  ; "bar" wakes up and reads the two first echoes
2 bar: echo LL 1
LL 1
2 bar: read line
2 bar: echo LL 2
LL 2
2 bar: read line  ; "bar" waits for more
2 foo: echo 3     ; "foo" wakes up from its second sleep
2 bar: echo LL 3
LL 3
2 bar: read line
2 foo: sleep 1
3 foo: echo 4     ; "foo" does the last echo and exits
3 bar: echo LL 4
LL 4
3 bar: read line  ; "bar" fails to read more
3 bar: sleep 1    ;... and goes to sleep for one second

real    0m4.14s
user    0m0.00s
sys     0m0.10s

Итак, в заключение, конвейер занимает 4 секунды, а не 6, из-за буферизации вывода первых двух вызовов echoв foo.sh.

1
07.08.2019, 10:16
1 ответ

Это достаточно просто:

Если вы используете bash, сохраните такой фрагмент...

if [ -f "$HOME/.bash_aliases" ]; then
   source "$HOME/.bash_aliases"
fi

для каждого файла, который вы хотите импортировать в свой ~/.bashrc. Вы могли бы написать .вместо source, но лично мне больше нравится длинная форма.

1
27.01.2020, 23:41

Теги

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