Я недавно переключился с 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
будет расширен автоматически.