Причина проста, cd
- это builtin оболочки (и функция shell в некоторых оболочках), в то время как echo
является и двоичным, и shell builtin:
$ type -a cd
cd is a shell builtin
$ type -a echo
echo is a shell builtin
echo is /bin/echo
sudo
не может обрабатывать сборки оболочки, но может обрабатывать двоичные файлы в $ PATH
. При использовании sudo echo
в $ PATH
обнаруживается /bin/echo
, поэтому используется то, что sudo cd
не может найти cd
в $ PATH
, следовательно, не удается.
-121--57666-
Он выполняется, поскольку по умолчанию предполагается, что исполняемый файл является сценарием/bin/sh. То есть, если вы не указали какую-либо конкретную оболочку - это # !/bin/sh.
Параметр//просто игнорируется в путях - можно считать, что имеет значение single '/'.
Поэтому вы можете считать, что у вас есть сценарий оболочки с первой строкой:
/usr/bin/env go run $0 $@ ; exit
Что делает эта строка? Он запускает «env» с параметрами «go run $0 $ @». there 'go' является командой, а 'run $0 $ @' являются аргументами и после этого выходит из сценария. $0 - это имя сценария. $ @ - исходные аргументы сценария. Итак, эта строка работает, который запускает этот скрипт с его аргументами
Есть довольно интересные детали, как указано в комментариях, что две косые черты определены реализация, и этот скрипт стал бы POSIX-правильным, если бы он указал три или более косые черты. Для получения подробной информации о том, как следует обрабатывать косые черты в трактах, см. http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html .
Обратите внимание, что существует еще одна ошибка в сценарии $ @ правильно использовать «$ @», потому что в противном случае, если какой-либо параметр содержит места, он будет разделен на множество параметров. Например, нельзя передать имя файла с местами, если не использовать «$ @»
Этот сценарий явно основан на идее, что «//» равен «/»
-121--7261-
Это не шебанг, это просто сценарий, который запускается оболочкой по умолчанию. Оболочка выполняет первую строку
//usr/bin/env go run $0 $@ ; exit
, которая приводит к вызову go
с именем этого файла, поэтому в результате этот файл запускается как сценарий go, а затем оболочка выходит без просмотра остальной части файла.
Но зачем начинать с //
вместо просто /
или правильного шебанга #!
?
Это связано с тем, что файл должен быть действительным сценарием перехода, или он будет жаловаться. В го символы //
обозначают комментарий, поэтому го видит первую строку как комментарий и не пытается интерпретировать его. Символ #
, однако, не обозначает комментарий, поэтому обычный шебанг приведет к ошибке, когда go интерпретирует файл.
Эта причина синтаксиса состоит только в том, чтобы построить файл, который является как сценарием оболочки, так и сценарием перехода без одного шага на другом.
] У меня была та же проблема - то же сообщение об ошибке. Я обнаружил, что ВМ продолжит создание, если я дам ей менее 4 гб оперативной памяти, [
] [], так что, например, 3 гб оперативной памяти ВМ начала установку[
][], процесс установки был ужасно медленным[
][] в []/var/log/libvirt/libvirtd.log[
] Я увидел ошибки типа:[
][]qemuSetupCgroupForVcpu:566 : Невозможно получить подсказки vcpus
[
][
][]Я не загрузил все модули ядра kvm:[
] [][]kvm_intel 54285 0
квм 333172 1 квм_интел
[
][
]
[] Мне не хватало модуля "kvm_intel" из списка, который вы видите выше (выше уже корректный вывод). и, попробовав "modprobe kvm_intel", я получил ошибку[
][]Я перезагрузил машину, зашел в BIOS и, наконец, все исправил, включив "allow intel virtualization" в "on" (был выключен)[
][]Я и не мечтал, что в BIOS отключена поддержка виртуализации, но . ... это была рабочая станция HP xw8400 5-летней давности [
] []btw во время создания у меня также возникла проблема с "permission denied" при попытке установить виртуальную машину на []*.img[
] (raw).
Сообщение было что-то вроде:[
"warning kvm is not available"
]
[]Это была проблема SELinux, потому что я переключил стандартный пул VM хранилищ на индивидуальный путь (разные FS)[
] [$ ls -alZ /var/lib/libvirt/
drwxr-xr-x. root root system_u:object_r:virt_image_t:s0 images
$ semanage fcontext -a -t virt_image_t "/data/VM_KVM/(/.*)?"
$ restorecon -R -v /data/VM_KVM/
]
[]исправил проблему SElinux.[
].