繁体   English   中英

如何在Swift脚本中获取Zsh的别名命令的output?

[英]How to get the output of Zsh's alias command in Swift script?

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

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

我想在 Swift 脚本中使用它,所以我创建了以下程序。
但是,虽然pwdls命令正确执行,但alias命令不会 output 任何东西。

// 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:

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

谢谢。

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

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

您可以通过运行/usr/bin/env alias重新创建 Swift 代码正在执行的操作。 就我而言,我得到了一个空的 output。

您要做的是编辑您的 Swift 代码以运行zsh ,并在zsh中运行alias 相当于/bin/zsh -l -c "alias"

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM