Я недавно переключился с tcsh на bash, и я привык делать такие вещи, как sudo `alias netstat` но так как alias дает name=value в bash, я больше не могу этого делать. Есть ли эквивалент в bash, поэтому мне не нужно делать sudo `alias netstat | sed -r "s/.*='(.*)'/\1/"`?
2 ответа
Bash хранит свой список псевдонимов в ассоциативном массиве BASH_ALIASES . Эквивалентом sudo `alias netstat` будет тогда sudo ${BASH_ALIASES[netstat]} . Однако вместо этого я бы предложил следующее, которое работает со встроенными командами оболочки и правильно работает с цитированием:
sudo bash -c "${BASH_ALIASES[netstat]}"
Еще много чего не будет с этим работать, например, вложенные псевдонимы.
Вы пытаетесь заставить bash расширять псевдонимы после sudo . Вам не нужно делать это точно так же; на самом деле, в bash есть гораздо более удобный способ - добавить псевдоним для sudo , заканчивающийся пробелом ...
alias sudo="sudo "
... и sudo netstat будет расширен автоматически.
