如何通过命令行更改 iTerm2 中的默认 shell?

如何通过命令行更改 iTerm2 中的默认 shell?

如何通过 CLI 更改 iTerm2 shell?

我想更改用户的 iTerm2 偏好设置。

  1. 我对 iTerm2 的偏好设置进行了快照:
    defaults read com.googlecode.iTerm2 > iTerm2.original.defaults
    
  2. 然后我在 GUI 中更改了它们: iTerm2 自定义 Shell
  3. 然后我又拍了一张快照:
    defaults read com.googlecode.iTerm2 > iTerm2.updated.defaults
    
  4. 我可以看到区别在于“新书签”(虽然对于偏好更改来说,这似乎是一个相当奇怪的名称......):
    {
        ...
        "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

相关内容