Well, shaders are - in a sense - descriptors for the renderer of how a surface should look and interact with the scene and it's lights. Unless you have a game that renders a single frame only I don't see how you could really run the shader just once.
However using a vertex shader for terrain mesh displacement is probably not the right way to go anyways since your terrain likely requires collisions too. Anything you do in the vertex shader wouldn't be reflected in the generated collision meshes anyways.
You'll likely want to look into array meshes and modifying mesh instances via the SurfaceTool and MeshDataTool instead. etc. Yes this would run on the CPU but it should be somewhat parallelizable via multi-threading and designing your terrain generation to be chunk based. This would allow for a mode more dynamic chunk generation and world shifting for bigger open world design too should it ever become necessary.