К сожалению, конструкция эмуляторов терминала (, таких как окно терминала в вашей системе Ubuntu ), в большинстве случаев не обеспечивает хорошей поддержки вставки; в частности, по большей части вставка работает точно так же, как если бы вы очень быстро печатали )одно и то же (. Большинство вещей, которые вы могли бы принять за какой-то специальный сигнал для программы, работающей в терминале, на самом деле находятся в данных диапазона -, то есть просто в символе. Если ваша вставка содержит этот символ, программа не сможет определить разницу между вводом символа и его вставкой.
Таким образом, вы не можете использовать вставку для передачи файлов, если только они не содержат символов, которые могут запутать принимающую программу. В частности, вкладки, содержащиеся в вашей вставке, сбивают с толку bash — он видит вкладку и пытается выполнить завершение файла или команды. Так же, как когда вы вводите вкладку.
Трюк с cat > filename
вполне может потерпеть неудачу, если бы в вставляемом содержимом был элемент управления -D (да, это символ ). Но если вы избегаете управляющих символов (, кроме новой строки и табуляции ), это должно сработать.
Разработчики Unix обычно используют программы передачи файлов для перемещения файлов. Основной, который мы в основном используем, это scp
или sftp
, оба они являются частью SSH (и, таким образом, полностью зашифрованы, аутентифицированы и т. д. — те же гарантии безопасности, что и SSH ).
Самый простой способ работы между Windows и виртуальной машиной Ubuntu (или наоборот ), вероятно, заключается в использовании функций обмена файлами )вашего гипервизора (VM продукта — они есть у большинства. Вы можете выбрать каталог на хосте, и он будет виден внутри гостя. С помощью WSL вы можете получить доступ ко всем своим файлам Windows в папке /mnt/<drive letter>/
. Если ваш гипервизор не поддерживает эту функцию, второй -самый простой способ — использовать обычный файловый ресурс. Вы можете смонтировать общие файловые ресурсы Windows из Ubuntu или установить Samba в Ubuntu, чтобы сделать общие файловые ресурсы для Windows.
В зависимости от того, что вы делаете,могут быть лучшие подходы. Например, автоматическое развертывание. Может быть, вы хотите, чтобы вы регистрировали файл в git, а затем он автоматически развертывался на вашем компьютере с Ubuntu, когда вы выполняете git push
? Это может быть так же просто, как использование git hooks, или намного сложнее — для этого есть целые пакеты программного обеспечения.
Наконец, есть большое преимущество в том, чтобы записывать эти скрипты в файлы, а не просто вставлять их в оболочку. :Файл служит документацией того, что вы сделали. Что-то пошло не так? Если что-то пошло действительно неправильно, проверьте файл, чтобы понять, почему. Это позволяет точно определить, что пошло не так, что часто является первым шагом к устранению ущерба. Нужно сделать это снова? Просто создайте файл во второй раз. Нужно сделать что-то подобное? Отредактируйте файл, а затем источник его.
Если вам необходимо вставьте сюда -документ:
Если вы хотите вставить текст напрямую в bash, лучше всего убедиться, что он не содержит управляющих символов, кроме символа новой строки. Вставка этого должна работать:
bash /dev/fd/10 10<<'SES'
cat <<EMR >> /etc/apache2/apache2.conf
#
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
EMR
SES
Если у вас должен быть отступ, вы можете использовать пробелы и sed вместо начального -
для его удаления (обратите внимание, что вы пошли дальше и использовали stdin вместо fd 10, потому что синтаксис проще, и я сомневаюсь в этом вопросы):
sed -e 's/^\s\+//' <<'SES' | bash
cat <<EMR >> /etc/apache2/apache2.conf
#
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
EMR
SES
Это использует функцию sed search -replace(s/PATTERN/REPLACEMENT/
)для поиска в начале строки(^
)пробела (\s
), повторяющегося один или несколько раз (\+
), и ничего не заменяет. Другими словами, он обрезает все начальные пробелы в каждой строке. Опция -e
для sed явно указывает, что это сценарий sed для запуска — на самом деле это не требуется, sed в любом случае интерпретирует свой первый аргумент как сценарий — но лично мне кажется более ясным всегда использовать -e
.
Обратите внимание, что «пробелы» выше включают пробелы и табуляции (и еще несколько символов, которые здесь не очень важны ). Этот sed обрежет их все, независимо от используемого микса.
Конечно, я понятия не имею, почему вы вставляете команду в bash, говоря ему запустить bash для запуска cat.
Вы можете попробовать Shift
+ Page Up
или Shift
+ Page Down
.
Вы также должны использовать more
/ less
для чтения файлов, а не cat
.