Вы не показываете все. где вы получите ${OUPUT_RESULTS}. Это также орфографическая ошибка, если вы имели в виду$OUTPUT_RESULTS}
ghostdog74
если кто-то написал, OUPUT_RESULTS = "filename.log"он получит неоднозначное перенаправление. Потому что Bash не хочет пространства вокруг =оператора.
Poutrathor
Ответы:
271
Иногда Bash может быть довольно тупым.
Следующие команды все возвращают разные сообщения об ошибках в основном для одной и той же ошибки:
$ echo hello >
bash: syntax error near unexpected token `newline`
$ echo hello > ${NONEXISTENT}
bash: ${NONEXISTENT}: ambiguous redirect
$ echo hello >"${NONEXISTENT}"
bash::No such file or directory
Добавление кавычек вокруг переменной, кажется, является хорошим способом справиться с сообщением «неоднозначного перенаправления»: вы, как правило, получаете лучшее сообщение, когда допустили ошибку при наборе текста - и когда ошибка вызвана пробелами в имени файла, использование кавычек это исправить.
Если ваш ABC="junk file.txt", это все равно будет проблема.
Чарльз Даффи
15
поставить кавычки вокруг вашей переменной. Если в нем есть пробелы, он также даст вам «неоднозначное перенаправление». также проверьте свое правописание
Цитаты не имеют значения. Если в расширении переменной есть пробелы, вы просто получите информацию о неправильном файле и / или ложных сообщениях об ошибках, связанных с частью имени файла после пробела.
ПРОСТО МОЕ правильное мнение
@JUSTMYcorrectOPINION, оболочка не выполняет повторный анализ после раскрытия параметров - это означает, что содержимое после пробела в результатах расширения не может привести к заполнению другого фрагмента синтаксиса.
Charles Duffy
5
Недавно я обнаружил, что пробелы в имени файла перенаправления вызовут сообщение «неоднозначное перенаправление».
Например, если вы перенаправляете на application$(date +%Y%m%d%k%M%S).logи указываете неправильные символы форматирования, перенаправление не будет выполнено, например, до 10:00. Тем не менее, если вы использовали application$(date +%Y%m%d%H%M%S).logэто будет успешно. Это потому, что %kформат дает ' 9'9 утра, где %Hдает '09'9 утра.
Содержит ли путь, указанный в $ {OUPUT_RESULTS}, какие-либо пробельные символы? Если это так, вы можете рассмотреть возможность использования ... >> "${OUPUT_RESULTS}"(используя кавычки).
(Вы также можете рассмотреть возможность переименования вашей переменной в ${OUTPUT_RESULTS})
Если редирект вашего скрипта содержит переменную, а тело скрипта определяет эту переменную в разделе, заключенном в круглые скобки, вы получите ошибку «неоднозначного перенаправления». Вот воспроизводимый пример:
Если вы сделаете это, вы получите «/home/ubuntu/a.sh: строка 1: $ logit: неоднозначное перенаправление». Это потому что
«Размещение списка команд в скобках приводит к тому, что создается подоболочка, и каждая из команд в списке выполняется в этой подоболочке без удаления неэкспортированных переменных. Поскольку список выполняется в подоболочке, назначения переменных не сохраняются. после завершения подоболочки ".
Чтобы исправить это, вы можете изменить сценарий на шаге 2, чтобы определить переменную вне скобок: logit="/home/ubuntu/test.log" && (echo "a") >> $logit
если вы используете имя переменной в команде оболочки, вы должны объединить ее со +знаком.
например :
если у вас есть два файла, и вы не собираетесь жестко кодировать имя файла, вместо этого вы хотите использовать имя переменной "input.txt" = x "output.txt" = y
затем («команда оболочки в кавычках» + x> + y)
это будет работать особенно, если вы используете это внутри программы на python с командой os.system, вероятно,
${OUPUT_RESULTS}
. Это также орфографическая ошибка, если вы имели в виду$OUTPUT_RESULTS}
OUPUT_RESULTS = "filename.log"
он получит неоднозначное перенаправление. Потому что Bash не хочет пространства вокруг=
оператора.Ответы:
Иногда Bash может быть довольно тупым.
Следующие команды все возвращают разные сообщения об ошибках в основном для одной и той же ошибки:
Добавление кавычек вокруг переменной, кажется, является хорошим способом справиться с сообщением «неоднозначного перенаправления»: вы, как правило, получаете лучшее сообщение, когда допустили ошибку при наборе текста - и когда ошибка вызвана пробелами в имени файла, использование кавычек это исправить.
источник
sh -c 'echo hello >/tmp/hello' >/tmp/world
работает правильно.У вас есть переменная с именем
OUPUT_RESULTS
или это более вероятноOUTPUT_RESULTS
?источник
ABC="junk file.txt"
, это все равно будет проблема.поставить кавычки вокруг вашей переменной. Если в нем есть пробелы, он также даст вам «неоднозначное перенаправление». также проверьте свое правописание
например двусмысленного перенаправления
источник
Недавно я обнаружил, что пробелы в имени файла перенаправления вызовут сообщение «неоднозначное перенаправление».
Например, если вы перенаправляете на
application$(date +%Y%m%d%k%M%S).log
и указываете неправильные символы форматирования, перенаправление не будет выполнено, например, до 10:00. Тем не менее, если вы использовалиapplication$(date +%Y%m%d%H%M%S).log
это будет успешно. Это потому, что%k
формат дает' 9'
9 утра, где%H
дает'09'
9 утра.echo $(date +%Y%m%d%k%M%S)
дает20140626 95138
echo $(date +%Y%m%d%H%M%S)
дает20140626095138
Ошибочная дата может дать что-то вроде:
где следующее - то, что было бы желательно:
источник
Содержит ли путь, указанный в $ {OUPUT_RESULTS}, какие-либо пробельные символы? Если это так, вы можете рассмотреть возможность использования
... >> "${OUPUT_RESULTS}"
(используя кавычки).(Вы также можете рассмотреть возможность переименования вашей переменной в
${OUTPUT_RESULTS}
)источник
У меня только что была эта ошибка в скрипте bash. Проблема была случайной \ в конце предыдущей строки, которая выдавала ошибку.
источник
Еще одна вещь, которая может вызвать «неоднозначное перенаправление» -
\t
\n
\r
это имя переменной, которую вы пишете.Может нет
\n\r
? Но ошибаться на стороне осторожностиПопробуй это
Я получил удар при разборе HTML, Tabs
\t
в начале строки.источник
Если редирект вашего скрипта содержит переменную, а тело скрипта определяет эту переменную в разделе, заключенном в круглые скобки, вы получите ошибку «неоднозначного перенаправления». Вот воспроизводимый пример:
vim a.sh
создать скрипт(logit="/home/ubuntu/test.log" && echo "a") >> ${logit}
chmod +x a.sh
сделать его исполняемымa.sh
Если вы сделаете это, вы получите «/home/ubuntu/a.sh: строка 1: $ logit: неоднозначное перенаправление». Это потому что
От использования скобок для группировки и расширения выражений
Чтобы исправить это, вы можете изменить сценарий на шаге 2, чтобы определить переменную вне скобок:
logit="/home/ubuntu/test.log" && (echo "a") >> $logit
источник
если вы используете имя переменной в команде оболочки, вы должны объединить ее со
+
знаком.например :
если у вас есть два файла, и вы не собираетесь жестко кодировать имя файла, вместо этого вы хотите использовать имя переменной
"input.txt" = x
"output.txt" = y
это будет работать особенно, если вы используете это внутри программы на python с командой os.system, вероятно,
источник
Это может быть так.
вы не указали файл в переменной и перенаправили вывод в него, тогда bash выдаст эту ошибку.
Переменная out_file установлена неправильно, поэтому следите за этим. Кстати, этот код печатает весь контент и его имя файла на консоли.
источник
Я получил эту ошибку при попытке использовать расширение скобки для записи вывода в несколько файлов.
например:
echo "text" > {f1,f2}.txt
результаты в-bash: {f1,f2}.txt: ambiguous redirect
В этом случае используйте
tee
для вывода в несколько файлов:1>/dev/null
предотвратит текст с записью на стандартный выводЕсли вы хотите добавить в файл (ы), используйте
tee -a
источник