Zawsze myślałem, że jedyną korzyścią z używania myślnika zamiast basha jest to, że myślnik był mniejszy, a zatem wiele wystąpień myślnika zaczynało się szybciej w czasie rozruchu. Ale przeprowadziłem pewne badania i znalazłem ludzi migrujących wszystkie swoje skrypty, aby pobiegać w nadziei, że będą działać szybciej, i znalazłem to również …
Zauważyłem, że w zasadzie żaden system, z którym kiedykolwiek pracowałem, nie ma /bin/shtak naprawdę pliku wykonywalnego. Zawsze jest to dowiązanie symboliczne do dash, bashw trybie POSIX lub coś podobnego. Dlaczego? Jakie są wady korzystania z prawdziwego, oryginalnego /bin/sh? (Szybkość? Licencjonowanie?)
Za bashpomocą mogę zastąpić proces i traktować dane wyjściowe procesu tak, jakby to był plik zapisany na dysku: $ echo <(ls) /dev/fd/63 $ ls -lAhF <(ls) lr-x------ 1 root root 64 Sep 17 12:55 /dev/fd/63 -> pipe:[1652825] niestety, zastępowanie procesów nie jest obsługiwane w dash. Jaki byłby najlepszy sposób na …
Podczas inkrementacji zmiennej przed / po, w powłoce POSIX, jaka jest różnica między tymi dwoma przykładami. Wydaje się, że miałyby takie same konsekwencje, ale czy byłyby wykorzystywane w inny sposób? Kiedy wolisz jeden od drugiego? X=$((X+1)) : $((X=X+1))
Moja $ PATH wygląda następująco: /home/torbjorr/deployed/vector/x86_64-GNU%2fLinux:/home/torbjorr/deployed/typewriter/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mustudio/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mathext/x86_64-GNU%2fLinux:/home/torbjorr/deployed/doxymax/x86_64-GNU%2fLinux:/home/torbjorr/deployed/c2tex/x86_64-GNU%2fLinux:/home/torbjorr/deployed/x86_64-GNU%2fLinux/wand:/home/torbjorr/deployed/x86_64-GNU%2fLinux/spellesc:/home/torbjorr/deployed/x86_64-GNU%2fLinux/projinit:/home/torbjorr/deployed/x86_64-GNU%2fLinux/herbs:/home/torbjorr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games W bashu mogę bez problemu wywołać różdżkę znajdującą się w /home/torbjorr/deployed/x86_64-GNU%2fLinux/wand lubić $ wand (i) Mål från "main.cpp" har registrerats (i) Skapar katalog "__wand_targets_dbg" (i) Kör g++ "main.cpp" -fpic -L"/home/torbjorr/deployed" -g -Wall -std=c++11 -I"/home/torbjorr/deployed" -o "__wand_targets_dbg/cb-template Jednak w trybie zgodności z powłoką Bourne'a nie …
Chciałem wiedzieć, czy skrypty napisane dla dash, ash i sh są w 100% kompatybilne? Czy są jakieś dodatkowe funkcje myślnika, jesionu lub zmiany składni? Z tego, co słyszałem, popiół jest bezpośrednim potomkiem sh.
W bash: $ type : : is a shell builtin $ type true true is a shell builtin Wygląda na to, że są takie same, ale nie dają tego samego śladu systemowego: $ strace : strace: :: command not found $ strace true execve("/bin/true", ["true"], [/* 82 vars */]) = …
W myślniku funkcje i zmienne wydają się żyć w oddzielnych przestrzeniach nazw: fn(){ fn="hello world" } fn; echo "The value is $fn!" #prints: The value is hello world! fn; echo "The value is $fn!" #prints: The value is hello world! #the fn variable doesn't conflict with the fn function Czy …
Jaki byłby najlepszy sposób sprawdzenia, czy 1 $ jest liczbą całkowitą w / bin / dash? W bashu mogłem: [[ $1 =~ ^([0-9]+)$ ]] Ale to nie wydaje się być zgodne z POSIX i dash tego nie obsługuje
Mój dashskrypt przyjmuje parametr w postaci hostname:portnp .: myhost:1234 Natomiast port jest opcjonalny, tj .: myhost Muszę odczytać hosta i port w osobne zmienne. W pierwszym przypadku mogę wykonać: HOST=${1%%:*} PORT=${1##*:} Ale to nie działa w drugim przypadku, gdy port został pominięty; echo ${1##*:}po prostu zwraca nazwę hosta zamiast pustego …
Napisałem skrypt, który przełącza użytkowników podczas działania, i wykonałem go za pomocą przekierowania plików do standardowego wejścia. Tak więc user-switch.sh... #!/bin/bash whoami sudo su -l root whoami I uruchomienie go bashdaje oczekiwane zachowanie $ bash < user-switch.sh vagrant root Jeśli jednak uruchomię skrypt sh, otrzymam inne dane wyjściowe $ sh …
W Bash możesz przekierować wszystkie przyszłe standardowe wyjścia aktualnie uruchomionego skryptu. Na przykład za pomocą tego skryptu exec > >(logger -t my-awesome-script) echo 1 echo 2 echo 3 To skończy się w syslog: Oct 26 01:03:16 mybox my-awesome-script[72754]: 1 Oct 26 01:03:16 mybox my-awesome-script[72754]: 2 Oct 26 01:03:16 mybox my-awesome-script[72754]: …
Bash może wydrukować nazwę bieżącej funkcji: $ bash -c 'g(){ echo $FUNCNAME; }; g' g Dash nie może jednak użyć FUNCNAME : $ dash -c 'g(){ echo $FUNCNAME; }; g' Czy można uzyskać dostęp do bieżącej nazwy funkcji za pomocą Dash?
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.