V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JCZ2MkKb5S8ZX9pq
V2EX  ›  macOS

请教一下 zshrc 的 alias 写法

  •  
  •   JCZ2MkKb5S8ZX9pq · 2020-12-31 14:53:27 +08:00 · 1658 次点击
    这是一个创建于 1458 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在把一些东西从 win 往 mac 搬。

    • 在 win 下的是这样。
    doskey autorun = python %~dp0autorun.py $*  
    # 其中%~dp0 是当前 bat 所在路径
    
    • mac 下我知道大概长这样
    alias autorun="python somepath/autorun.py"
    

    请问

    • mac 下能设定命令所在根目录为一个参数嘛?怎么写?
    • mac 下应该不同于 bat,参数我直接跟在 alias 后面打就可以了吧?感觉这里的 alias 就是个缩写。以后要加参数感觉就是 autorun -f 类似这样是吗?
    • 追加一条,添加一个 path 到环境变量的话,请问怎么写比较简洁?
    13 条回复    2021-01-04 09:15:25 +08:00
    aibangjuxin
        1
    aibangjuxin  
       2020-12-31 14:58:09 +08:00
    装一个 oh-my-zsh,然后自己看看里面的格式,应该差不多都能搞定了
    TimePPT
        2
    TimePPT  
       2020-12-31 15:01:17 +08:00
    可以试试在 .zshrc 里写 function
    JCZ2MkKb5S8ZX9pq
        3
    JCZ2MkKb5S8ZX9pq  
    OP
       2020-12-31 15:05:34 +08:00
    @TimePPT

    function 不知道咋写……
    win 可以
    set long=a_very_long_patn\
    然后调用时
    doskey sync = python %long%sync.py $*

    请问 zshrc 里能设一个这样的长路径为变量嘛?因为很长而且重复很多次。搜变量搜到的都是怎么改环境变量的……
    idlerlestat
        4
    idlerlestat  
       2020-12-31 15:19:55 +08:00   ❤️ 1
    简单的可以直接写
    targetdir=foo
    或者写
    export targetdir=foo
    然后引用是 $targetdir
    JCZ2MkKb5S8ZX9pq
        5
    JCZ2MkKb5S8ZX9pq  
    OP
       2020-12-31 15:26:40 +08:00
    @idlerlestat 好的,我试试。
    dzdh
        6
    dzdh  
       2020-12-31 15:27:11 +08:00
    我选择在 ~/bin/ 目录写个 shell 脚本兼容各个 shell :doge:
    JCZ2MkKb5S8ZX9pq
        7
    JCZ2MkKb5S8ZX9pq  
    OP
       2020-12-31 15:55:26 +08:00
    @idlerlestat ok,搞好了。谢谢。
    wengych
        8
    wengych  
       2020-12-31 16:25:09 +08:00
    当前路径作为参数可以用 ls `pwd`
    wengych
        9
    wengych  
       2020-12-31 16:26:32 +08:00   ❤️ 1
    alias 只是给命令起别名,并不具备读取 shell 命令行参数的能力,如果你需要使用参数读入,那就需要配合 function 来搞了,给你个 demo,我日常看 log 和 shell 进 POD 的 alias

    alias kexec='function _kexec(){ kubectl exec -it -n ${1} $(kubectl get pods -n ${1} -l app=${2} --no-headers -o custom-columns=NAME:.metadata.name) /bin/bash }; _kexec'
    alias klog='function _klog(){ kubectl get pods -n ${1} -l app=${2} --no-headers -o custom-columns=NAME:.metadata.name| xargs kubectl logs -n ${1} -f }; _klog'
    wengych
        10
    wengych  
       2020-12-31 16:27:15 +08:00
    追加路径就是
    export PATH=/usr/local/bin:$HOME/macports/bin:$HOME/macports/sbin:$GRADLE_HOME/bin:$PATH
    JCZ2MkKb5S8ZX9pq
        11
    JCZ2MkKb5S8ZX9pq  
    OP
       2020-12-31 16:43:34 +08:00
    @wengych 嗯,我的大都是 python 配合 fire,试了一下参数直接加后面就可以了。
    IgniteWhite
        12
    IgniteWhite  
       2021-01-01 11:03:36 +08:00 via iPhone
    zsh 不用关心双引号这个很不习惯……
    ihwbunny
        13
    ihwbunny  
       2021-01-04 09:15:25 +08:00   ❤️ 1
    1. 可以,但需要一点假定和技巧:比如你的.py 不知在哪里,但是可以使用诸如 whereis 或者 which 找到,那么可以用下面的命令行提取这个命令所在目录. 比如 xxd,用 whereis 得到 /usr/bin/xxd,获得他的目录的命令是:
    dirname $(whereis xxd),得到 /usr/bin; 如果是知道它的目录直接写在后面即可

    2. 可以,直接后面跟参数
    比如 alias ll="ls -la"
    那么写参数的命令:$ ll $HOME

    3. 前面都有人说了:export PATH=/your/path/here:$PATH
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2106 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:21 · PVG 09:21 · LAX 17:21 · JFK 20:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.