Jak napisać funkcję w bash, który wykonuje polecenia, że jest on podany jako argument, gdzieBash funkcja polecenia nazywając podane jako argument
- Podana komenda może być aliasem
- Argumenty muszą być przekazane dokładnie tak, jak dane; bez dokonania oceny mogą być wykonane
Innymi słowy, jak napisać jako przezroczysty-as-możliwe otoki funkcję.
Celem funkcji owijania może być na przykład ustawienie katalogu bieżącego przed i po podanej komendzie i/lub ustawienie zmiennych środowiskowych, lub czas trwania danego polecenia, ... Jako prosty przykład tutaj Biorę funkcję, która po prostu drukuje linię, a następnie wykonuje podane polecenie.
Pierwsza próba:
function wrap1 {
echo Starting: "[email protected]"
"[email protected]"
}
Można go używać jak wrap1 echo hello
. Ale problem polega na tym, że nie można wykonać alias myalias echo
, a następnie wywołać wrap1 myalias hello
: nie rozwiąże to aliasu.
Kolejna próba z użyciem eval
:
function wrap2 {
echo Starting: "[email protected]"
eval "[email protected]"
}
Teraz wywołanie prace aliasu. Ale problem polega również na ocenie argumentów. Na przykład wrap2 echo "\\a"
drukuje po prostu a
zamiast \a
, ponieważ argumenty są oceniane dwukrotnie.
shopt -s expand_aliases
również nie pomaga.
Czy istnieje sposób na obu aliasów takich jak wrap2, ale nadal przekazywać argumenty bezpośrednio jak wrap1?
Twoja pierwsza funkcja jest drogą do zrobienia. Poddaj się poprawnie obsłudze aliasów. ["W niemal każdym celu preferowane są funkcje powłoki zamiast aliasów."] (Http://www.gnu.org/software/bash/manual/html_node/Aliases.html#Aliases) –
[Wymagane czytanie] (http://mywiki.wooledge.org/BashFAQ/050) –