Я часто интерактивно петлю, например. мои файлы и хотите выполнить определенную операцию на всех из них, скажем, я хотел бы переименовать все файлы:
for file in $(ls); do mv "$file" "${file}_new"; done
Это прекрасно работает. Но прежде чем вызывать эту команду, я бы хотел посмотреть, что она на самом деле делает, поэтому я бы добавил эхо вперед
for file in $(ls); do echo mv "$file" "${file}_new"; done
он показывает мне все команды, которые он будет вызывать. Если я доволен ими, я удаляю echo
и выполняю его.
Однако, когда команды немного более тонкие, возможно, включая трубы или более одной команды, это больше не работает. Конечно, я мог бы использовать '
, поэтому специальные символы не интерпретируются, но тогда у меня нет расширения параметров. Я мог бы также избежать специальных символов, но это было бы очень утомительно.
Мой вопрос: какой лучший способ сделать это? Я прочитал в man bash
о опции -n
, которая выполняет "Чтение команд, но не выполняет их. Это может быть использовано для проверки оболочки script для синтаксических ошибок. Это игнорируется интерактивными оболочками". Это именно то, что мне нужно, но мне нужно это для интерактивной оболочки. Обратите внимание, что параметры -x
или -v
не помогают, так как он будет не только показывать команду, но и вызывать ее, а затем уже может быть уже слишком поздно.