#linux #bash
#linux #bash
Вопрос:
Привет, в моем скрипте я объединил два файла в новый файл под названием output.txt . У меня возникли проблемы с проверкой этого output.txt существует файл для последующей печати сообщения «конкатенация прошла успешно». Объединение, похоже, работает и создает новый файл.
cat $file1 $file2 >> output.txt
file3="$output.txt" #incorrect?
if [ -e $file3 ]
then
echo "concatenation of files successful"
fi
Комментарии:
1. Удалите знак доллара:
file3="output.txt"
.$output
заменяется переменной с именем output (которая не существует в опубликованном здесь фрагменте). Если вы переместите переменную file3 вышеcat
, вы также можете использовать ее для перенаправления выходных данных, чтобы избежать двойного повторения имени файла.
Ответ №1:
Должно быть:
file3="output.txt"
cat $file1 $file2 >> $file3
if [ -f $file3 ]; then
echo "concatenation of files successful"
fi
Комментарии:
1. Это
-f
не устраняет проблему. На самом деле-e
тоже работает просто отлично.2. Просто исправил это — теперь все должно быть в порядке
3. Я изменил на upvote, потому что @cfillion добавил свой ответ только в качестве комментария. Итак, даже если это отредактировано, теперь это правильный ответ. @phebus — обратите внимание, что в сценарии оболочки вам не нужно иметь
;
afterif
и beforethen
4. Теперь он пытается выполнить команду с именем
file3
. Вокруг знака равенства не должно быть пробелов.
Ответ №2:
file3="output.txt"
cat $file1 $file2 >> $file3
if [ $? == 0 ]; then
echo "concatenation of files successful"
fi
Проверка существования файла не означает, что файлы были успешно объединены. Это означает, что файл существует.
Учтите, что:
cat $file1 $file2(missing) >> $file3
cat $file1(missing) $file2 >> $file3
заставило бы $file3
существовать.
Проверка значения завершения последней операции с помощью $?
учетных записей для успешной работы всей операции.
Кроме того, если вы специально не хотите добавлять >>
к существующему файлу, вы ВСЕГДА будете добавлять. Таким образом, ваш файл всегда будет существовать после первой операции.
Ответ №3:
В одной строке
cat $file1 $file2 >> output.txt amp;amp; echo 'Success' || echo 'Failed'