我看到了嘚 vared
您可以即时编辑指定的环境变量。是否有等效命令狂欢?
谢谢
答案1
我不知道有什么东西能像 一样zsh
在vared
盒子里bash
、在外面工作。
但是,您可以定义一个函数,允许您使用例如编辑环境变量的值vim
:
function vared {
[[ $# -eq 1 ]] || { echo "Usage: vared VARNAME" >&2 ; return 1 ; }
tmpfile=$( command mktemp -t vared.XXXX )
echo "${!1}" > "$tmpfile"
command vim "$tmpfile" && export $1="$(< "$tmpfile" )"
command rm "$tmpfile"
}
称之为vared PATH
。
它做什么?它创建一个临时文件,将指定变量的当前值写入文件,并vim
以临时文件作为参数打开。现在您需要编辑值、保存并退出vim
(您可以退出而不保存文件以跳过保存更改)。之后,文件的内容将设置为新变量值,整个内容将被导出,并且临时文件将被删除。command
有必要跳过 shell 别名和函数查找,例如,在最后删除文件之前会询问的rm
别名rm -i
。
如果变量不存在或不是环境变量,之后将会如此。
答案2
在 bash 4.x 中你可以做同样的事情
# bash
read -e -p 'edit your path: ' -i "$PATH" PATH
# zsh
vared -p 'edit your path: ' PATH
来源https://stackoverflow.com/questions/2642585/read-a-variable-in-bash-with-a-default-value
文档https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html
答案3
这是基于thecotne 的回答,为 GNU Bash 4.3 编写:
vared(){
# Based on the zsh builtin of the same name.
IFS= read -rei "${!1}" "$1"
}
请注意,这与 Zsh 内置命令有一些细微的差别,例如:
- 如果变量未设置,则不会出错
- 检查变量名的有效性前打印其值(例如
vared $
) - 截断多行变量。