Muszę wkleić wielowierszowy kod bash do terminala, ale za każdym razem, gdy to robię, każda linia jest uruchamiana jako osobne polecenie, gdy tylko zostanie wklejona.
Odpowiedzi:
Jestem naprawdę zaskoczony, że nie ma tutaj takiej odpowiedzi, szukałem rozwiązania tego pytania i myślę, że to jest najłatwiejsze podejście i bardziej elastyczne / wybaczające ...
Jeśli chcesz wkleić wiele wierszy ze strony internetowej / edytora tekstu / itp. Do basha, niezależnie od tego, czy są to polecenia w wierszu, funkcja czy cały skrypt ... po prostu zacznij od a (
i zakończ a )
i Enter, na przykład w poniższym przykładzie:
Gdybym miał następujący blob
function hello {
echo Hello!
}
hello
Możesz wkleić i zweryfikować w terminalu za pomocą basha:
Począwszy od (
Wklejanie tekstu i naciśnięcie Enter (aby był ładny) ... lub nie
Kończąc na a )
i naciskając Enter
Przykład:
imac:~ home$ ( function hello {
> echo Hello!
> }
> hello
> )
Hello!
imac:~ home$
Wklejony tekst jest automatycznie kontynuowany z prependerem >
dla każdego wiersza. Testowałem z wieloma wierszami z poleceniami na wiersz, funkcjami i całymi skryptami. Mam nadzieję, że pomoże to innym zaoszczędzić trochę czasu!
Jeśli naciśniesz C-x C-e
polecenie, które otworzy domyślny edytor, który został zdefiniowany .bashrc
, możesz użyć wszystkich zaawansowanych funkcji swojego edytora. Kiedy zapiszesz i wyjdziesz, linie będą czekać na twoje wejście.
Jeśli chcesz zdefiniować swój edytor, po prostu napisz dla Ex. EDITOR=emacs -nw
lub EDITOR=vi
wewnątrz~/.bashrc
emacs
i vi
robią), a po zapisaniu i wyjściu polecenia są wykonywane natychmiast .
Oprócz odwrotnego ukośnika, jeśli linia kończy się na |
lub &&
lub ||
, będzie kontynuowana w następnej linii.
Dodaj nawiasy wokół linii. Przykład:
$ (
sudo apt-get update
dokku apps
dokku ps:stop APP # repeat to shut down each running app
sudo apt-get install -qq -y dokku herokuish sshcommand plugn
dokku ps:rebuildall # rebuilds all applications
)
(
, szelki {
również działałyby tak samo w powyższym przykładzie
Inna możliwość:
bash << EOF
echo "Hello"
echo "World"
EOF
iTerm doskonale radzi sobie z poleceniami wielowierszowymi, zapisuje polecenie wielowierszowe jako jedno polecenie, a następnie możemy użyć Cmd
+ Shift
+ ;
do nawigacji po historii.
Sprawdź więcej wskazówek iTerm na temat efektywnej pracy z iTerm
Próbować
out=$(cat)
Następnie wklej linie i naciśnij Ctrl-D (wstaw znak EOF). Wszystkie dane wejściowe do Ctrl-D zostaną przekierowane na standardowe wyjście kota.
$ out=$(cat) && eval "$out"
. naciśnij Enter po ostatniej linii, a następnie CTRL + D, jak sugerowano powyżej.