Скрипт не работает при передаче в bash через -c

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

6
03.04.2020, 22:34
1 ответ

В вашем одном -лайнере $1находится в строке с двойными кавычками:

"cat <(date|awk '{print $1}')"

Это означает, что он будет расширен интерактивной оболочкой. Если первый позиционный параметр $1пуст, он расширит его до пустой строки, в результате чего программа awkпросто выведет ввод :

.
awk '{print }'

Экранируйте $в $1как \$1, чтобы остановить попытку оболочки расширить его. Ваша полная команда будет выглядеть как

bash -c "cat <(date|awk '{print \$1}')"

В вашем варианте скрипта $1находится в строке с одинарными кавычками. Поэтому оболочка не будет пытаться расширить его.

Однако в этом конкретном случае было бы лучше использовать только

date +%a

для печати сокращенного названия дня. См. также руководство strftime(3)(man 3 strftime).

В более новых bashверсиях (выпуск 4.2+, т.е. не с по умолчаниюbashв macOS, а с установленным, например, через. Самодельный ),

printf '%(%a)T\n' -1

сделал бы то же самое, не вызывая никаких внешних команд.

22
28.04.2021, 23:19

Теги

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