Pytania dotyczące podstawiania poleceń powłoki (takich jak $ (polecenie) lub `polecenie`), ich mechanizmu, poprawnej składni itp. Nie należy ich mylić z aliasami.
Próbuję wywołać skrypt z listą nazw plików zebranych przez find. Nic specjalnego, po prostu coś takiego: $ myscript `find . -name something.txt` Problem polega na tym, że niektóre ścieżki zawierają spacje, więc przy interpretacji argumentów dzielą się one na dwie nieprawidłowe nazwy. Zazwyczaj otaczałbym te nazwiska cudzysłowami, ale tutaj są …
Odpowiedź na to pytanie spowodowała, że zadałem kolejne pytanie: myślałem, że poniższe skrypty robią to samo, a drugi powinien być znacznie szybszy, ponieważ pierwszy używa cattego, który musi otwierać plik w kółko, ale drugi otwiera tylko plik jeden raz, a potem po prostu echo zmiennej: (Zobacz poprawny kod w sekcji …
Poniższy kod najlepiej opisuje sytuację. Dlaczego ostatni wiersz nie wyświetla końcowego znaku nowej linii? Wynik każdego wiersza jest pokazany w komentarzu. Używam GNU bash, wersja 4.1.5 echo -n $'a\nb\n' | xxd -p # 610a620a x=$'a\nb\n' ; echo -n "$x" | xxd -p # 610a620a echo -ne "a\nb\n" | xxd -p …
Zgodnie z tym podręcznikiem : -E (także -o errtrace) Jeśli jest ustawiony, każda pułapka na ERR jest dziedziczona przez funkcje powłoki, podstawienia poleceń i polecenia wykonywane w środowisku podpowłoki. Pułapka ERR zwykle nie jest dziedziczona w takich przypadkach. Jednak muszę to interpretować nieprawidłowo, ponieważ następujące działania nie działają: #!/usr/bin/env bash …
Próbuję uruchomić grep na liście kilkuset plików: $ head -n 3 <(cat files.txt) admin.php ajax/accept.php ajax/add_note.php Jednak pomimo tego, że szukam ciągu, o którym wiem, że znajduje się w plikach, następujące pliki nie wyszukują plików: $ grep -i 'foo' <(cat files.txt) $ grep -i 'foo' admin.php The foo was found …
Powiedzmy, że muszę użyć cudzysłowów do enkapsulacji danych wyjściowych podpowłoki, takich jak: DATA="$(cat file.hex | xxd -r)" Ale muszę zagnieżdżać tego rodzaju rzeczy, takie jak: DATA="$(cat file.hex | xxd -r | tr -d \"$(cat trim.txt)\")" Nie mogę używać pojedynczych cudzysłowów, ponieważ nie rozszerzają one zawartych w nich zmiennych. Wycofywanie cytatów …
Dany cmd='fun(){ echo "$@"; }; fun $(fun $(fun hi))' pociski zwykle wymagają wykonania 2 widelców, aby tak się stało strace-f(){ strace -f "$@" 2>&1; }; for sh in dash bash zsh ksh; do printf "$sh\t" ; strace-f $sh -c "$cmd" |grep -e clone -e fork -c; done z wyjątkiem kshheroicznie …
Czy istnieje sposób na określenie wielu zmiennych (nie tylko liczb całkowitych) w forpętlach w bash? Mogę mieć 2 pliki zawierające dowolny tekst, z którym musiałbym pracować. Potrzebuję funkcjonalnie czegoś takiego: for i in $(cat file1) and j in $(cat file2); do command $i $j; done Jakieś pomysły?
W następstwie: nieoczekiwane zachowanie podczas podstawiania poleceń powłoki Mam polecenie, które może przyjąć ogromną listę argumentów, z których niektóre mogą zawierać spacje (i prawdopodobnie inne rzeczy) Napisałem skrypt, który może wygenerować dla mnie te argumenty z cudzysłowami, ale muszę skopiować i wkleić dane wyjściowe np ./somecommand <output on stdout with …
Próbuję zrozumieć, jak dokładnie Bash traktuje następujący wiersz: $(< "$FILE") Według strony podręcznika Bash jest to równoważne z: $(cat "$FILE") i mogę podążać za rozumowaniem tej drugiej linii. Bash wykonuje rozszerzanie zmiennej $FILE, wprowadza podstawienie polecenia, przekazuje wartość $FILEdo cat, cat przekazuje zawartość $FILEstandardowego wyjścia, podstawianie polecenia kończy się przez …
Zobacz następujące przykłady i ich wyniki w powłokach POSIX: false;echo $?lub false || echo 1:1 false;foo="bar";echo $?lub foo="bar" && echo 0:0 foo=$(false);echo $?lub foo=$(false) || echo 1:1 foo=$(true);echo $?lub foo=$(true) && echo 0:0 Jak wspomniano w najczęściej głosowanej odpowiedzi na /programming/6834487/what-is-the-variable-in-shell-scripting : $? służy do znalezienia wartości zwracanej ostatnio wykonanej …
Widziałem konstrukcje w skryptach takich jak ten: if somevar="$(somecommand 2>/dev/null)"; then ... fi Czy to gdzieś jest udokumentowane? W jaki sposób określa się status zwracany zmiennej i jaki ma ona związek z zastępowaniem poleceń? (Na przykład, czy uzyskałbym ten sam wynik if echo "$(somecommand 2>/dev/null)"; then?)
Chciałbym użyć podstawienia zmiennej na określonym ciągu, do którego uzyskuję dostęp za pomocą polecenia. Na przykład, jeśli skopiuję coś do schowka, mogę uzyskać do tego dostęp w ten sposób. $ xclip -o -selection clipboard Here's a string I just copied. Jeśli przypiszę ją do zmiennej, będę mógł na niej podstawiać …
Kiedy robię, ls | grep pngwyjście grep jest: 2015-05-15-200203_1920x1080_scrot.png 2015-05-16-025536_1920x1080_scrot.png (nazwa pliku, nowa linia, nazwa pliku, nowa linia) następnie echo $(ls | grep png)wyjścia: 2015-05-15-200203_1920x1080_scrot.png 2015-05-16-025536_1920x1080_scrot.png (nazwa pliku, spacja z dzielenia słów, nazwa pliku, nowa linia !! z echa !!) Wszystko jest w porządku, ale kiedy to zrobię, aby zapobiec …
Pracuję nad projektem na dwóch różnych komputerach - jednym z systemem Mac OSX 10.8.3 i jednym z systemem Red Hat Enterprise Linux. Na komputerze Mac mogę to zrobić: vim $(ls -R */*.@(h|cpp) */*/*.@(h|cpp)) i wszystko działa dobrze. W systemie Linux nie działa. Wszystkie działają dokładnie tak, jak się spodziewam: ls …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.