Tri*_*Tao 0 macos bash shell alias
所以说我家里有一个档案~/
:
sample.txt
Run Code Online (Sandbox Code Playgroud)
我想把它移到 ~/work/
我愿意 mv sample.txt work/
,它会工作.
但是,如果我想要一个可以mv文件的别名,然后cd到最后一个arg怎么办?这意味着将文件移动到文件夹,然后自动cd到该文件夹.
我有类似的东西(请注意,我mv
的别名是默认覆盖保护,不确定是否存在问题):
alias mv='mv -i $@'
alias mvg='mv "$@"; cd !$;'
Run Code Online (Sandbox Code Playgroud)
它不起作用(似乎mv没有得到args).
任何帮助将不胜感激!
您可以定义一个简单的函数,而不是使用别名:
mv_cd() { mv "$1" "$2" && cd "$2"; }
Run Code Online (Sandbox Code Playgroud)
用法: mv_cd file dest
这仅适用于一个文件.要允许多个文件,您可以执行以下操作:
mv_cd() {
declare -a files
while (($# > 1)); do
files+=("$1")
shift
done
mv "${files[@]}" "$1" && cd "$1"
}
Run Code Online (Sandbox Code Playgroud)
用法: mv_cd file1 file2 ... fileN dest
这将构建一个包含传递给函数的所有文件名的数组,然后移动它们并更改目录.
正如评论中所提到的(感谢@chepner),没有必要在函数内部构建一个数组.相反,您可以使用数组切片将最后一个参数与其他参数分开:
mv_cd() { mv "${@:1:$#-1}" "${@: -1}" && cd "${@: -1}"; }
Run Code Online (Sandbox Code Playgroud)
传递给函数的参数位于数组中$@
.${@:1:$#-1}
是从第一个元素到第$#-1
th个元素的切片,其中$#
是数组的长度.负索引可用于指定数组末尾的范围,因此${@: -1}
获取数组的最后一个元素.没有必要指定范围的结束,因为默认情况下它会到达数组的末尾.