Попробуйте выполнить следующее под оболочкой bash echo "Reboot your instance!"
На моей установке:
root@domU-12-31-39-04-11-83:/usr/local/bin# bash --version
GNU bash, version 4.1.5(1)-release (i686-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
root@domU-12-31-39-04-11-83:/usr/local/bin# uname -a
Linux domU-12-31-39-04-11-83 2.6.35-22-virtual #35-Ubuntu SMP Sat Oct 16 23:57:40 UTC 2010 i686 GNU/Linux
root@domU-12-31-39-04-11-83:/usr/local/bin# echo "Reboot your instance!"
-bash: !": event not found
Кто-нибудь может объяснить, что такое "события bash"? Я никогда не слышал эту концепцию раньше. Кроме того, как я должен вывести "!" в конце предложения?
+H
чтобы включить что-то и-H
отключить что-то.+
просто противоположны этому.!
это специальный символ для bash, он используется для ссылки на предыдущие команды; например,вызовет и выполнит последнюю команду, которая началась со строки "rm", и
вызовет, но не выполнит последнюю команду, которая началась со строки "rm". bash интерпретирует восклицательный знак
echo "reboot your instance!"
как « подставьте здесь последнюю команду, начавшуюся с символов, следующих за восклицательным знаком », и ворчит, что не может найти событие (команду) в вашей истории, которое началось с одного двойные кавычки.Пытаться
защитить (убежать) восклицательный знак от bash.
источник
Чтобы решить исходную проблему, попробуйте использовать одинарные кавычки, а не двойные. В последнем случае bash будет пытаться расширить определенные символы перед передачей результата в команду (в данном случае echo). В одинарных кавычках bash передает всю строку без изменений.
!
используется в командах для ссылки на историю командной строки. Смотрите: http://tldp.org/LDP/abs/html/abs-guide.html#HISTCOMMANDS для полного набора. В приведенном выше примере bash пытается раскрыться!"
как ссылка на событие до того, как эхо просматривает его, отсюда и ошибка.Обратите внимание, что в сценариях все команды истории отключены, поскольку они имеют смысл только в интерактивной оболочке.
Единственное, что я использую на регулярной основе, это
!$
. Он расширяется до последнего аргумента предыдущей команды. Это полезное сокращение местами.источник
!!
заполнить последнюю введенную команду замечательно полезно; в частности,sudo !!
илиpfexec !!
$_
работает в большем количестве оболочек, чем bash, и это отличная переменная, в отличие от!$
. (и @LeartS: мне понравилось отсутствие смайликов в твоей шутке.;))Просто поставьте пробел между! и "чем это будет работать.
Приветствия.
источник
Да, ! это специальный символ для bash, он используется для ссылки на предыдущие команды.
Немногие способы справиться с ситуацией
Следующая строка выведет строку как есть
Следующая команда выполнит команду и объединит строку
источник
В
bash 4.3
это кажется вам больше не нужно использовать одинарные кавычки илиset +H
:источник
set +H
или цитирование. Или у васset +H
где-то (как в/etc/profile
).Вы также можете использовать heredoc :
Это раздражает в этом случае, потому что это не однострочный текст, а для более длинных команд (например, написание скрипта bash), он отлично работает.
источник