首页 > 解决方案 > 如何在 Swift 脚本中获取 Zsh 的别名命令的输出?

问题描述

我添加了很多自己的别名来~/.zshrc在 macOS 上使用 Zsh。
我发现我可以使用该alias命令来显示注册的别名。

% alias
myalias1='cd ...'
myalias2='cp ...'
myalias3='mv ...'
myalias4='find ...'
...

我想在 Swift 脚本中使用它,所以我创建了以下程序。
但是,虽然pwdandls命令正确执行,但该alias命令不会输出任何内容。

// shell.swift
import Foundation

@discardableResult
func shell(_ args: String...) -> Int32 {
  let task = Process()
  task.launchPath = "/usr/bin/env"
  task.arguments = args
  task.launch()
  task.waitUntilExit()
  return task.terminationStatus
}

print("--- run pwd command:")
shell("pwd")

print("--- run ls command:")
shell("ls")

print("--- run alias command:")
shell("alias")
% swift shell.swift
--- run pwd command:
/Users/myname
--- run ls command:
Applications  Documents     Library     Music       Public
Desktop       Downloads     Movies      Pictures    shell.swift
--- run alias command:

我无法理解其原因。
请让我知道是否有解决方案。

谢谢。

(我用翻译工具来问这个问题。)

标签: swiftmacosshellzsh

解决方案


zsh,如果你跑which alias,你会得到alias: shell built-in command。虽然在 中确实存在一个真正的可执行文件/usr/bin/alias,但它不是当您在 中运行alias命令时运行的代码zsh。它是内置的zsh

您可以通过运行/usr/bin/env alias. 就我而言,我得到了一个空输出。

你要做的是编辑你的 Swift 代码来运行zsh,并aliaszsh. 相当于/bin/zsh -l -c "alias"

尝试运行shell("zsh", "-l", "-c", "alias")


推荐阅读