swift - 如何在 Swift 脚本中获取 Zsh 的别名命令的输出?
问题描述
我添加了很多自己的别名来~/.zshrc
在 macOS 上使用 Zsh。
我发现我可以使用该alias
命令来显示注册的别名。
% alias
myalias1='cd ...'
myalias2='cp ...'
myalias3='mv ...'
myalias4='find ...'
...
我想在 Swift 脚本中使用它,所以我创建了以下程序。
但是,虽然pwd
andls
命令正确执行,但该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:
我无法理解其原因。
请让我知道是否有解决方案。
谢谢。
(我用翻译工具来问这个问题。)
解决方案
在zsh
,如果你跑which alias
,你会得到alias: shell built-in command
。虽然在 中确实存在一个真正的可执行文件/usr/bin/alias
,但它不是当您在 中运行alias
命令时运行的代码zsh
。它是内置的zsh
。
您可以通过运行/usr/bin/env alias
. 就我而言,我得到了一个空输出。
你要做的是编辑你的 Swift 代码来运行zsh
,并alias
在zsh
. 相当于/bin/zsh -l -c "alias"
。
尝试运行shell("zsh", "-l", "-c", "alias")
。
推荐阅读
- opencv - 错误:(-215:断言失败)函数'cv :: resize'中的ssize.empty()
- php - 调度作业来处理临时文件是否安全?
- ios - CloudKit中核心数据模型文件的备份和恢复
- python - 使用 Python 对按行和列分隔的数据进行数据处理
- php - 为什么这个变量拒绝像字符串一样工作?
- java - 当我处理 SoundPool 时,A Fragment 中的 getContext() (想要播放数据库中的声音文件)
- android - 更改 RecyclerView 的适配器后更新片段
- php - Laravel - 找不到您要查找的页面
- java - 反序列化列表
包含一个列表 使用 Gson - python - 在 Selenium 中抓取多个 URL 并写入 JSON