i'm writing makefile have access path file running. mkfile_path
.
mkfile_path= $(abspath $(lastword $(makefile_list)))
i want trim path, cutting off end last packages
.
here examples:
- input:
/users/thomasreggi/desktop/monorepo/packages/event-as-promised/packages/node_modules/.bin/ied
output:
/users/thomasreggi/desktop/monorepo/packages/event-as-promised
imput:
/users/thomasreggi/desktop/monorepo/packages/event-as-promised/node_modules/.bin/ied
- output:
/users/thomasreggi/desktop/monorepo
how can manipulate path shell / make?
we can use parameter subsitution remove shortest matching part right end of string this:
$ var="/users/thomasreggi/desktop/monorepo/packages/event-as-promised/packages/node_modules/.bin/ied" $ echo "${var%packages*}" /users/thomasreggi/desktop/monorepo/packages/event-as-promised/ $ var="/users/thomasreggi/desktop/monorepo/packages/event-as-promised/node_modules/.bin/ied" $ echo "${var%packages*}" /users/thomasreggi/desktop/monorepo/
${var%pattern}
means remove $var
shortest part of pattern matches end(from right) of $var
.
to remove longest matching part can use ${var%%pattern}
.
more info on parameter substitution can found here