如何在鱼壳中执行参数扩展?

时间:2019-06-08 23:54:55

标签: bash shell fish

我有一个bash program,它使用参数扩展从我所在的目录返回上一级。例如,如果我位于目录/path/to/my/dir中,则程序将允许我转到/path/to/my/,而无需重新键入整个路径或多次使用cd -。 最近,我决定开始使用鱼壳,我喜欢它。但是我不确定在鱼壳中如何parameter expansion。 我试图在~/.config/fish/config.fish中为我的bash程序创建一个别名,以便back将运行bash /path/to/back.sh,但这在当前环境中不会运行该程序。由于Fish不知道如何运行bash脚本,因此将其更改为. /path/to/back.sh并没有真正的帮助。

我想知道鱼中是否有参数扩展功能?我尝试阅读documentation,但找不到它。

任何帮助将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:1)

除非您通过.source运行它,否则 back.sh 脚本可能无法工作。这是因为子进程不能影响任何其他进程的环境,包括CWD。如果您运行back.sh 1,则只会更改该脚本的CWD,这是没有意义的,因为该脚本会立即退出。

Fish确实支持参数扩展,但不支持${prev_dir%/*}之类的括号结构。 Fish更喜欢使用命令进行此类操作,而不是使用复杂的语法。因此,例如,要删除最后一个斜杠之后的所有内容,您可以在fish中执行以下操作:

set prev_dir (string split -r -m1 / $prev_dir)[1]

并且正如一位评论者所述,您通常只需要cd ..就可以在目录层次结构中上移一个级别。您真正需要多久向上移动一次以上?对我来说,答案很少,在这种情况下,我只需要cd ../..移动两个级别即可。