У меня есть сценарий, который говорит

gzip -cN "$1" > "$1.gz" | ls -l "$1.gz" | awk '{print $5}'

Я запускаю его с аргументом ff и получаю сообщение об ошибке

ls: cannot access ff.gz: No such file or directory

Но когда я впоследствии запускаю ls -l (вручную, из командной строки), я вижу, что там есть ff.gz  В чем проблема?

1 ответ1

1

Если вы делаете

cmd1 | cmd2
затем cmd 1 и cmd 2 работают более или менее одновременно.  Если у вас многопроцессорная система, они могут работать одновременно.  Но в любом случае они будут выполняться одновременно, причем точное планирование будет определяться слишком сложными факторами, чтобы их можно было прогнозировать.

Ваш cmd1 - это gzip -cN "$1" > "$1.gz" а ваш cmd2 - это ls -l "$1.gz" .  Следовательно, ls может запуститься до того, как gzip создаст файл "$1.gz" .

ls не читает со своего стандартного ввода, поэтому добавление в него смысла не имеет.  Вы, вероятно, хотите сделать

gzip -cN "$1" > "$1.gz"  &&  ls -l "$1.gz" | awk '{print $5}'
то есть, запустите gzip , а затем, если это удастся, запустите ls -l .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .