Если вы хотите узнать, что пошло не так в вашей версии: вы использовали $ files
вместо $ x
в команде basename. Так что это должно работать (хотя и не проверено):
for x in *.txt
do
mv "$x" "`basename "$x" .txt`.text"
done
Обычный вывод происходит на файловом дескрипторе 1 (стандартный вывод ). Диагностический вывод, а также взаимодействие с пользователем (подсказки и т. д. ), происходит с файловым дескриптором 2 (стандартная ошибка ), а ввод поступает в программу с файловым дескриптором 0 (стандартный ввод ).
Пример вывода на стандартный вывод/ошибка:
echo 'This goes to stdout'
echo 'This goes to stderr' >&2
В обоих приведенных выше случаях echo
записывает в стандартный вывод, но во второй команде стандартный вывод команды перенаправляется в стандартную ошибку.
Пример фильтрации (удаления )одного или другого (или обоих )каналов вывода:
{
echo 'This goes to stdout'
echo 'This goes to stderr' >&2
} >/dev/null # stderr will still be let through
{
echo 'This goes to stdout'
echo 'This goes to stderr' >&2
} 2>/dev/null # stdout will still be let through
{
echo 'This goes to stdout'
echo 'This goes to stderr' >&2
} >/dev/null 2>&1 # neither stdout nor stderr will be let through
Выходные потоки подключаются к текущему терминалу(/dev/pts/0
в вашем случае ), если они не перенаправлены в другое место, как показано выше.