Jak wkleić wielowierszowe kody bash do terminala i uruchomić je wszystkie naraz?


107

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:


111

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.


21
Uwaga: końcowe spacje to przerwą!
Max Reeder,

54

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:

  1. Począwszy od (

  2. Wklejanie tekstu i naciśnięcie Enter (aby był ładny) ... lub nie

  3. 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!


4
najłatwiejsza metoda IMO
Hobroker

1
@Toolkit dla prostych rzeczy będzie działać tak, jak opisałeś, ale rozwiązanie, które zaoferowałem, będzie działać w bardziej złożonych sytuacjach (podziały wierszy, wiele funkcji, całe skrypty itp.)
TryTryAgain

1
Powoduje to uruchomienie wklejonych poleceń w podpowłoce, więc często nie robi tego, co chcesz. Możesz użyć nawiasów klamrowych zamiast nawiasów, aby wymusić uruchomienie go w bieżącej powłoce; ale tak naprawdę, po prostu też nie rób. Powłoka może sobie poradzić.
tripleee

34

Jeśli naciśniesz C-x C-epolecenie, 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 -nwlub EDITOR=viwewnątrz~/.bashrc


2
Technika jest przydatna, ale pamiętaj, że edytor musi działać synchronicznie (tak jak emacsi virobią), a po zapisaniu i wyjściu polecenia są wykonywane natychmiast .
mklement0

16

Oprócz odwrotnego ukośnika, jeśli linia kończy się na |lub &&lub ||, będzie kontynuowana w następnej linii.


12

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
)

2
Zauważ, że podobnie jak paranteza (, szelki {również działałyby tak samo w powyższym przykładzie
GypsyCosmonaut



4

Aby zapobiec tworzeniu długich linii poleceń w pliku tekstowym, zachowuję takie fragmenty kodu kopiowania:

echo a;\
echo b;\
echo c


0

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


-1

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.


spróbuj tego: $ out=$(cat) && eval "$out". naciśnij Enter po ostatniej linii, a następnie CTRL + D, jak sugerowano powyżej.
Mohamed Bana
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.