В настоящее время я пытаюсь выполнить простую команду echo в Golang на Linux. Мой код выглядит следующим образом:Команда Echo в Golang
cmd = exec.Command("echo", "\"foo 0x50\"", ">", "test.txt")
_, err = cmd.Output()
if err != nil {
fmt.Println(err)
}
Но test.txt не появляется в моей папке (даже после компиляции и запуска кода). Это не первое, что я использую этот метод для выполнения команд, и я никогда не думал, что буду блокировать команду echo.
Итак, как я могу исправить этот код, чтобы иметь «foo 0x50» (с кавычками) в test.txt?
благодарит заранее!
Хорошо! но почему я не могу сделать это на одной линии, как я пытался в начале? – Majonsi
@Majonsi, вроде да - вам просто нужно знать, что эти '' '', '' '' '' '' 'и т. Д. Интерпретируются вашей * shell, * и ядром ОС, в которые вытесняются' exec.Cmd.Run' спецификация процесса ничего не знает о них. Таким образом, один из способов иметь это «в одной строке» - это exec '/ bin/sh -c 'echo blah blah> file.txt", так что не '/ bin/echo' порождается, а оболочка, которая затем сообщается для выполнения определенного скрипта. Оболочка анализирует это перенаправление из сценария и организует их. – kostix
@Majonsi, обратите внимание, что, хотя это будет работать, вам нужно подумать * трижды * (или более), прежде чем наступить на этот маршрут: как только вам нужно будет закодировать некоторые данные, которые могут содержать одиночные или двойные кавычки или символы перенаправления или что-то еще введите цитату ада. Гораздо хуже ситуация, когда вам нужно перейти к команде, в которой вы выполняете некоторые данные, полученные от пользователя: вы должны * должным образом * защитить его от интерпретации оболочки, а это означает, что блуждание по этому коллирующему аду является сундуком -дип в нем. Лучше не делать, действительно. – kostix