cd /u01/saddy | printf '%s\n' "XYZ.ABC.V.$(date -d '2020-06-14 +1 day' +%Y%m%d)"*.batch ;

Когда я запускаю указанную выше команду в putty, перейдя по пути /u01/saddy, команда работает нормально и дает результат, как и ожидалось, т.е.

XYZ.ABC.V.20200615180200.batch

Но когда я пытаюсь запустить команду из домашнего местоположения, команда возвращает вывод как

XYZ.ABC.V.20200615*.batch

Файлы в расположении /u01/saddy:

XYZ.ABC.V.20200615180200.batch,
XYZ.ABC.V.20200616190100.batch,
XYZ.ABC.V.20200617140200.batch.
0
AdminBee 6 Июл 2020 в 11:54
4
Зачем вам передавать «вывод» cd в команду? Это не имеет никакого смысла. Вы, вероятно, хотите cd /u01/saddy; rest_of_the_command
 – 
Panki
6 Июл 2020 в 11:52

1 ответ

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

XYZ.ABC.V.date-time.batch

Однако в этом случае глобус * не будет расширен оболочкой, а вместо этого будет передан буквально вашей команде printf. Вот почему вы получаете выходную строку, которую описываете.

Если вы хотите избежать этого, попробуйте установить

shopt -s nullglob

Затем, в случае, если выражение, содержащее *, ничему не соответствует, оно будет расширено до пустой строки, а не содержать буквально *.

Тем не менее, вы уже видите из этого поведения, что команда cd в том виде, в котором вы ее используете, явно не имеет никакого эффекта. Вы можете более подробно объяснить, чего вы пытаетесь достичь с помощью команды; тогда, возможно, участники могут помочь вам найти лучшее решение (вопрос о том, почему вы используете |, например, уже поднимался в комментарий).

2
AdminBee 6 Июл 2020 в 12:28