新创建的shuf别名失效,其余别名正常(重启后仍未解决)
问题原因
shell别名仅在交互式终端会话(比如手动打开的终端窗口)中生效,而脚本运行时会启动一个非交互式shell进程,这个进程不会自动加载~/.zshrc里的别名配置,所以脚本里的shuf命令无法被识别为gshuf。
解决办法
提供三种可选方案,按需选择:
方案1:直接修改脚本(最稳妥)
把keys.sh里的所有shuf替换成gshuf,修改后的脚本内容如下:gshuf -n 1 /Users/joel/sh/tools/keys.txt gshuf -n 1 /Users/joel/sh/tools/timesig.txt gshuf -n 4 /Users/joel/sh/tools/notes.txt方案2:让脚本加载zsh配置
在keys.sh的第一行添加加载~/.zshrc的命令,这样脚本运行时会导入你的别名:source ~/.zshrc shuf -n 1 /Users/joel/sh/tools/keys.txt shuf -n 1 /Users/joel/sh/tools/timesig.txt shuf -n 4 /Users/joel/sh/tools/notes.txt注意:如果
~/.zshrc里有仅适合交互式shell的配置(比如提示符美化、历史记录设置),可能会出现无关输出,需自行判断是否适用。方案3:创建软链接(一劳永逸)
给gshuf创建一个名为shuf的软链接,放到系统PATH包含的目录里(比如/usr/local/bin),这样不管是终端还是脚本,都能直接用shuf命令:
先确认gshuf的路径,在终端执行:which gshuf假设输出是
/usr/local/bin/gshuf,执行以下命令创建软链接:sudo ln -s /usr/local/bin/gshuf /usr/local/bin/shuf之后不管是终端还是脚本,
shuf命令都会直接指向gshuf,无需依赖别名。
内容的提问来源于stack exchange,提问作者spinhead
相关产品推荐
相关产品推荐

