如何通过 CLI 更改 iTerm2 shell?
我想更改用户的 iTerm2 偏好设置。
- 我对 iTerm2 的偏好设置进行了快照:
defaults read com.googlecode.iTerm2 > iTerm2.original.defaults
- 然后我在 GUI 中更改了它们:
- 然后我又拍了一张快照:
defaults read com.googlecode.iTerm2 > iTerm2.updated.defaults
- 我可以看到区别在于“新书签”(虽然对于偏好更改来说,这似乎是一个相当奇怪的名称......):
{ ... "New Bookmarks" = ( { ... Command = "/Users/aj/.local/bin/fish"; "Custom Command" = "Custom Shell"; ) }
我不知道如何更改这样的数组 - 或者是否可以使用命令来更改defaults
。还有其他方法吗?
以供参考
我确实知道如何使用 Terminal.app 和 Unix 命令来执行此操作。但这不是我想要的。
我不想/etc/shells
改变etc/passwd
。
我也打开了一个关于此问题的问题https://gitlab.com/gnachman/iterm2/-/issues/9151
在 Terminal.app 中更改 Shell
defaults write com.apple.Terminal "Shell" -string "/Users/me/.local/bin/fish"
更改用户的默认 Shell
MY_FISH="$(which fish)"
if ! grep "$MY_FISH" /etc/shells; then
sudo 'bash echo "$MY_FISH" >> /etc/shells'
fi
sudo chsh -s "$(which fish)" "$(whoami)"
答案1
plutil 和 PlistBuddy
plutil
可用于提取当前值并可PlistBuddy
用于写入新值。
使用 plutil 和 PlistBuddy 我能够确定“新书签”是保存配置文件首选项的地方。
普利蒂尔plutil -extract "New Bookmarks".0."Command" xml1 -o - ~/Library/Preferences/com.googlecode.iterm2.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<string>/Users/aj/.local/bin/fish</string>
</plist>
plutil -extract "New Bookmarks".0."Custom Command" xml1 -o - ~/Library/Preferences/com.googlecode.iterm2.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<string>Custom Shell</string>
</plist>
PlistBuddy
/usr/libexec/PlistBuddy -c "SET ':New Bookmarks:0:Custom Command' 'Custom Shell'" ~/Library/Preferences/com.googlecode.iterm2.plist
/usr/libexec/PlistBuddy -c "SET ':New Bookmarks:0:Command' $HOME/.local/bin/fish" ~/Library/Preferences/com.googlecode.iterm2.plist