最近,我发现了一个很酷的技巧,可以帮助用另一个子字符串替换环境变量中的子字符串。但我真的不明白它是如何做到的。
TEST_URL="abc/123.com"
NEW_TEST_URL="${TEST_URL/123/123-ro-}"
echo $NEW_TEST_URL
现在 NEW_TEST_URL 是 abc/123-ro-.com
这//
看起来与替代命令类似。
我在 Mac 终端上运行了这个
echo $0 返回 -zsh
最近,我发现了一个很酷的技巧,可以帮助用另一个子字符串替换环境变量中的子字符串。但我真的不明白它是如何做到的。
TEST_URL="abc/123.com"
NEW_TEST_URL="${TEST_URL/123/123-ro-}"
echo $NEW_TEST_URL
现在 NEW_TEST_URL 是 abc/123-ro-.com
这//
看起来与替代命令类似。
我在 Mac 终端上运行了这个
echo $0 返回 -zsh
我正在尝试在 macOS 上的 SwiftUI 中创建一个简单的下拉按钮。通常我会使用类似这样的代码:
MenuButton("☰") {
Button(action: { print("Something") }) {
HStack {
Image(systemName: "questionmark.circle")
Text("Something")
}
}
Button(action: { print("Something Else") }) {
HStack {
Image(systemName: "exclamationmark.circle")
Text("Something Else")
}
}
}
.menuButtonStyle(BorderlessButtonMenuButtonStyle())
仅显示.menuButtonStyle(BorderlessButtonMenuButtonStyle())
菜单图标 (☰)
无下拉菜单
但是,MenuButton
已被弃用,取而代之的是Menu
,这很好,但我需要用 对其进行修改.menuStyle
,并且找不到等效的BorderlessButtonMenuButtonStyle
什么操作相当于Menu
抑制下拉箭头?
我使用带有 ARM 的 Mac,由于我想与多个用户一起使用 Homebrew,因此我创建了一个名为 Homebrew 的单独帐户,专门用于管理它。我按照此处的说明进行操作 - https://kuvalkin.com/blog/homebrew-installation-on-multi-user-system/
在我的其他帐户上,我使用 brew 并将这些行添加到我的.zshrc
# Set PATH, MANPATH, etc., for Homebrew.
eval "$(/opt/homebrew/bin/brew shellenv)"
alias brew="sudo -H -i -u Homebrew brew"
到目前为止,一切运行良好,除了每当我打电话给医生时 brew 都会发出令人讨厌的警告:
Warning: No Cask quarantine support available: unknown reason.
Warning: /usr/bin occurs before /opt/homebrew/bin in your PATH.
This means that system-provided programs will be used instead of those
provided by Homebrew. Consider setting your PATH so that
/opt/homebrew/bin occurs before /usr/bin. Here is a one-liner:
echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
The following tools exist at both paths:
...
然而,当检查我PATH
和 Homebrew 用户时,与警告相反,我获得了一个表现良好的 PATH。
/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/TeX/texbin:/Applications/iTerm.app/Contents/Resources/utilities:/Users/username1/.scripts
调用sudo -H -i -u Homebrew echo $PATH
返回相同的 PATH。调用程序按预期工作 - 与警告所说的相反,自制版本优先。
此错误从何而来?此警告可以消除吗?
我正在尝试从.txt
带分隔符的文件生成多个文件。在本例中,列分隔符为|
,记录分隔符为:║
。
这是我正在尝试的代码:
awk -F'║', -vOFS=, -vc=1 '
NR == 1 {
for (i=1; i<NF; i++) {
if ($i != "") {
g[c]=i;
f[c++]=$i
}
}
}
NR>2 {
for (i=1; i < c; i++) {
print $1,$2, $g[i] > "output_"f[i]".tex"
}
}' biennalis.txt
的内容biennalis.csv
大致如下:
name|content
║Is-id27-ref06-01-13-1914|El año de la muerte del rey Ozías vi al Señor sentado en un trono excelso y elevado, y sus haldas llenaban el templo. Unos serafines se mantenían erguidos por encima de él; cada uno tenía seis alas: con un par se cubrían la faz, con otro par se cubrían los pies, y con el otro par aleteaban, y se gritaban el uno al otro:
\textquote{Santo, santo, santo, el Señor de los ejércitos: llena está toda la tierra de su gloria.}.
Se conmovieron los quicios y los dinteles a la voz de los que clamaban, y la casa se llenó de humo.
Yo dije:
\textquote{¡Ay de mí, que estoy perdido, pues soy un hombre de labios impuros, y entre un pueblo de labios impuros habito: que al rey el Señor de los ejércitos han visto mis ojos!}
Entonces voló hacia mí uno de los serafines con una brasa en la mano, que con las tenazas había tomado de sobre el altar, y tocó mi boca y dijo:
\textquote{He aquí que esto ha tocado tus labios: se ha retirado tu culpa, tu pecado está expiado.}
Y percibí la voz del Señor que decía:
\textquote{¿A quién enviaré? ¿y quién irá de parte nuestra}?
Yo contesté:
\textquote{Heme aquí: envíame.}
Dijo:
\textquote{Ve y di a ese pueblo: \textquote{Escuchad bien, pero no entendáis, ved bien, pero no comprendáis.} Engorda el corazón de ese pueblo, hazle duro de oídos, y pégale los ojos, no sea que vea con sus ojos y oiga con sus oídos, y entienda con su corazón, y se convierta y se le cure.}
Yo pregunté:
\textquote{¿Hasta dónde, Señor?}
Y él me contestó:
\textquote{Hasta que se vacíen las ciudades y queden sin habitantes, las casas sin hombres, la campiña desolada, y haya alejado el Señor a las gentes, y cunda el abandono dentro del país. Aun el décimo que quede en él volverá a ser devastado como la encina o el roble, en cuya tala queda un tocón. Este tocón será semilla santa.}
║Is-id27-ref01-01-18-0045|Visión de Isaías, hijo de Amós, acerca de Judá y de Jerusalén, en tiempos de Ozías, Jotán, Ajaz y Ezequías, reyes de Judá.
Oíd, cielos, escucha tierra, que habla el Señor: \textquote{Hijos he criado y educado, y ellos se han rebelado contra mí.
El buey conoce a su amo, y el asno el pesebre de su dueño; Israel no me conoce, mi pueblo no comprende}.
¡Ay, gente pecadora, pueblo cargado de culpas, raza malvada, hijos corrompidos! Han abandonado al Señor, han despreciado al santo de Israel, le han vuelto la espalda.
我期望的最终结果是单独的文件,其名称是第一列的内容,内容是第二列的内容:
Is-id27-ref06-01-13-1914.tex
El año de la muerte del rey Ozías vi al Señor sentado en un trono excelso y elevado, y sus haldas llenaban el templo. Unos serafines se mantenían erguidos por encima de él; cada uno tenía seis alas: con un par se cubrían la faz, con otro par se cubrían los pies, y con el otro par aleteaban, y se gritaban el uno al otro:
\textquote{Santo, santo, santo, el Señor de los ejércitos: llena está toda la tierra de su gloria.}.
...
Is-id27-ref01-01-18-0045.tex
Visión de Isaías, hijo de Amós, acerca de Judá y de Jerusalén, en tiempos de Ozías, Jotán, Ajaz y Ezequías, reyes de Judá.
Oíd, cielos, escucha tierra, que habla el Señor: \textquote{Hijos he criado y educado, y ellos se han rebelado contra mí.
...
ETC ...
执行命令时的错误如下:
awk: syntax error at source line 10
context is
print $1,$2, $g[i] > >>> "output_"f <<< [i]".tex"
awk: illegal statement at source line 10
我有一个使用 SwiftData @Model 的程序。该模型具有一个独特的年份属性,用于跟踪各种 SwiftData 模型条目。我允许用户通过菜单更改年份。同时具有 TextField 和 Text 视图的视图仅在年份值更改时更新 Text 视图。重现错误的程序的最小可编译版本如下。数据模型和数据结构为:
@Model final public class Model {
var multiples: Multiples = Multiples(multiple1: 1.0)
@Attribute(.unique) var modelYear: Int
init(modelYear: Int) {
self.modelYear = modelYear
}
}
struct Multiples: Codable {
var multiple1: Double = 1.0
init(multiple1: Double){
self.multiple1 = multiple1
}
}
我有一个环境变量来跟踪年份。
extension EnvironmentValues {
@Entry() public var currentYear: Int = 2024
}
我有一个自定义的 TextField,它依赖于本地属性来防止我在 TextField 中键入时更新模型值。
public struct MyTextField: View {
@Binding var value: Double
@State var localValue: Double
@FocusState private var textFieldIsFocused: Bool
public init(value: Binding<Double>) {
self._value = value
self._localValue = State(initialValue: value.wrappedValue)
}
public var body: some View {
TextField("", value: $localValue, format: .number.precision(.fractionLength(2)))
.onHover{
hover in
if hover == false {
localValue = value
}
}
.onSubmit{
if value != localValue {
value = localValue
}
}
.textFieldStyle(.plain)
}
}
主应用程序和主窗口是:
@main
struct WindowtestApp: App {
init() {
let defaults = UserDefaults.standard
let year = defaults.object(forKey: "year") as? Int ?? 2024
do {
self.container = try ModelContainer(for: Model.self, configurations: ModelConfiguration(cloudKitDatabase: .none))
} catch{
print("Error")
exit(99)
}
container.mainContext.autosaveEnabled = true
let model = Model(modelYear: year)
if let fetchResult = try? container.mainContext.fetch(FetchDescriptor<Model>(predicate: #Predicate{$0.modelYear == year})) {
if fetchResult.isEmpty {
container.mainContext.insert(model)
}
} else {
container.mainContext.insert(model)
}
}
var availableYears: [Int] = [2024, 2025, 2026, 2027]
@AppStorage("year") var year: Int = 2024
var container: ModelContainer
var body: some Scene {
WindowGroup {
ContentView()
.modelContext(container.mainContext)
.environment(\.currentYear,year)
}
.commands{
CommandMenu("Tools"){
Menu("Years"){
ForEach( availableYears, id: \.self ) { y in
Button{
let context = container.mainContext
let fetches = try? context.fetch(FetchDescriptor<Model>())
let years = fetches != nil ? fetches!.map{$0.modelYear} : [2024]
if !years.contains(y) {
let newModel = Model(modelYear: y)
context.insert(newModel)
_ = try! context.save()
}
year = y
} label: {
Text("\(y)")
Image(systemName: y == year ? "checkmark.rectangle" : "rectangle")
}
}
}
}
}
}
}
struct ContentView: View{
@Environment(\.currentYear) var currentYear
@Environment(\.modelContext) var context
var body: some View{
@Bindable var model: Model = try! context.fetch(FetchDescriptor<Model>(predicate: #Predicate { $0.modelYear == currentYear}))[0]
TabView{
Tab(content: {
VStack{
Text(verbatim: "Tab for \(currentYear)")
MyTextField(value: $model.multiples.multiple1)
Text(verbatim: "\(Double(model.multiples.multiple1) * Double(currentYear))")
}
.frame(width:100)
.navigationTitle(Text(verbatim: "Tab for \(currentYear)"))
}){
Text("Tab")
}
}
.tabViewStyle(.sidebarAdaptable)
}
}
不起作用的行为是,当我切换年份时,MyTextField 值没有更新,但 Text 值确实更新,这表明存在正确的模型值。我希望在切换年份时两个视图都会更新。
重现该问题。
以下屏幕截图显示了该行为。
第一个显示为 2024 年的模型选择 2 的倍数。最底部的文本视图会更新以反映 2*2024。
下一个屏幕截图显示切换到 2025 年。
MyTextField 视图仍显示 2 的倍数。对于 2025 年,倍数已经是 3,这反映在更新的 Text 视图中,该视图显示 6025.0 (3*2025)。因此,模型似乎已正确更新,MyTextField 只是没有刷新视图以显示模型 multiple1 属性的最新版本。
在 Linux 上,clang
以下gcc
有一个-ffunction-sections
选项,可以将每个函数放在自己单独的部分(然后可以使用适当的链接选项来删除未使用的部分,从而删除未使用的函数)。
然而,它似乎clang
在 MacOS 上默默忽略了此选项:无论有没有它,汇编代码都是相同的。
这正常吗?有什么评论吗?
我有一个脚本,如果数据尚不存在,它会添加到 SwiftData 存储中。对于普通窗口,我已经让逻辑工作了,但我无法让它在 Menu Extra 上工作。以下是示例:
import SwiftUI
import SwiftData
@main
struct XBApp: App {
var bundleID: String = "whatever"
var body: some Scene {
MenuBarExtra("Something", systemImage: "questionmark.bubble") {
// WindowGroup {
VStack {
XBContent(bundleID: bundleID)
.padding(0)
}
.modelContainer(for: XBData.self)
}
}
}
@Model
class XBData {
@Attribute(.unique) var bundle: String
var note: String
init(bundle: String, note: String = "Note") {
self.bundle = bundle
self.note = note
}
}
struct XBList: View {
@Query(sort: \XBData.bundle, animation: .easeInOut) var allXBarData: [XBData]
@Environment(\.modelContext) private var modelContext
var body: some View {
VStack {
Text("Everything So Far …")
List {
ForEach(allXBarData) { xbd in
HStack {
Text(xbd.bundle)
Spacer()
Text(xbd.note)
Spacer()
Button("", systemImage: "trash", action: {
modelContext.delete(xbd)
})
.buttonStyle(.bordered)
}
}
}
}
.modelContainer(for: XBData.self)
}
}
struct XBContent: View {
var bundleID: String = ""
@Environment(\.modelContext) private var modelContext
@State var xBData: XBData?
@Query(sort: \XBData.bundle, animation: .easeInOut) var allXBarData: [XBData]
func loadData(bundleID: String) -> XBData? {
print("\(#fileID):\(#line) - \(bundleID)")
// let filter = FetchDescriptor<XBData>(predicate: #Predicate { $0.bundle == bundleID })
let filter = FetchDescriptor<XBData>(predicate: #Predicate { $0.bundle == bundleID })
do {
var xbd = try modelContext.fetch(filter).first
print("\(#fileID):\(#line) - \(xbd == nil)")
if xbd == nil {
print("\(#fileID):\(#line) - \(xbd!.note)")
xbd = XBData(bundle: bundleID, note: "Newish Note: \(bundleID)")
modelContext.insert(xbd!)
try modelContext.save()
}
else {
print("\(#fileID):\(#line) - \(xbd!.note)")
}
return xbd
} catch {
print("\(#line) oops")
return nil
}
}
init(bundleID: String) {
self.bundleID = bundleID
}
var body: some View {
VStack {
Text(bundleID)
// XBList()
List {
ForEach(allXBarData) { xbd in
HStack {
Text(xbd.bundle)
Spacer()
Text(xbd.note)
Spacer()
Button("", systemImage: "trash", action: {
modelContext.delete(xbd)
})
.buttonStyle(.bordered)
}
}
}
}
.modelContainer(for: XBData.self)
.onAppear {
xBData = loadData(bundleID: bundleID)!
xBData!.note = "Newish Note: \(bundleID)"
try? modelContext.save()
}
}
}
抱歉,样本太长了。
假设 id 为 的项目whatever
不存在,则应该将其添加并显示在列表中。
在 App 结构中,我注释掉了WindowGroup
。如果我切换到它而不是 MenuBarExtra,它会按预期工作。
我还收到了非常有用的信息:
无法找到或解码原因
无法获取或解码不可用的原因
但是,我通过 WindowGroup 或 MenuBarExtra 获得了该信息,因此我不知道它是否相关。
让它与 MenuBarExtra 一起工作的技巧是什么?
我正在开发一个 macOS 应用程序。我有一个 SwiftData 项目列表。类似这样的内容:
struct TestDataList: View {
@Query var allTestData: [TestData]
var body: some View {
VStack {
Text("Everything")
if allTestData.count > 0 {
List {
ForEach(allTestData){ test in
HStack {
Text(test.id)
Spacer()
Text(test.value)
Spacer()
Button("", systemImage: "trash", action: {
// ?
})
}
}
}
}
}
.modelContainer(for: TestData.self)
}
}
我想添加一个按钮来删除当前项目。
我搜索过周围,但所有内容都是针对 iOS 的,我看不出它在这里如何应用。
我需要什么action
代码才能从列表中删除当前项目,更重要的是从数据中删除当前项目?
我正在从 Windows 迁移到 Mac,但无法设置用于 php 开发的工作环境。我已经在 MacOS 上安装了 Xampp,现在尝试安装 composer,但别名根本不起作用。首先,我将 php 添加到路径中
sudo nano ~/.zshrc
将其添加到文件并保存
export PATH=$PATH:/Applications/XAMPP/xamppfiles/bin
PHP 现已运行
source ~/.zshrc
php -v
PHP 8.2.4 (cli) (built: Apr 6 2023 04:12:41) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.4, Copyright (c) Zend Technologies
接下来,我按照其网站的指示下载并安装了 Composer。将 Composer 移至/usr/local/bin/composer
。我现在可以执行此命令
php /usr/local/bin/composer/composer.phar -V
Composer version 2.8.2 2024-10-29 16:12:11
PHP version 8.2.4 (/Applications/XAMPP/xamppfiles/bin/php-8.2.4)
Run the "diagnose" command to get more detailed diagnostics output.
composer
接下来,我尝试通过再次编辑 zshrc 文件来创建别名。现在它看起来像这样
export PATH=$PATH:/Applications/XAMPP/xamppfiles/bin
alias composer=”php /usr/local/bin/composer/composer.phar”
现在我尝试这个命令但失败了
source ~/.zshrc
composer -V
zsh: command not found: ”php