实现 shell