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.
107
Spróbuj umieścić \
na końcu każdego wiersza przed jego skopiowaniem.
Przykład:
echo "Hello world" && \
script_b.sh
echo $?
Kod zakończenia ( $?
) to teraz pełna sekwencja poleceń, a nie tylko ostatnie polecenie.
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 EnterPrzykł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!źródło
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
lubEDITOR=vi
wewnątrz~/.bashrc
źródło
emacs
ivi
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.źródło
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 )
źródło
(
, szelki{
również działałyby tak samo w powyższym przykładzieInna możliwość:
bash << EOF echo "Hello" echo "World" EOF
źródło
Aby zapobiec tworzeniu długich linii poleceń w pliku tekstowym, zachowuję takie fragmenty kodu kopiowania:
echo a;\ echo b;\ echo c
źródło
Spróbuj w ten sposób:
echo $( cmd1 cmd2 ... )
źródło
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
źródło
Próbować
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.
źródło
$ out=$(cat) && eval "$out"
. naciśnij Enter po ostatniej linii, a następnie CTRL + D, jak sugerowano powyżej.