diff --git a/src/virtualenv/activation/bash/__init__.py b/src/virtualenv/activation/bash/__init__.py
index c89b42ed..df3f7727 100644
--- a/src/virtualenv/activation/bash/__init__.py
+++ b/src/virtualenv/activation/bash/__init__.py
@@ -12,3 +12,6 @@ class BashActivator(ViaTemplateActivator):
 
     def templates(self):
         yield Path("activate.sh")
+
+    def as_name(self, template):
+        return template.stem
diff --git a/src/virtualenv/activation/via_template.py b/src/virtualenv/activation/via_template.py
index 3f6b46bb..d9d0a14d 100644
--- a/src/virtualenv/activation/via_template.py
+++ b/src/virtualenv/activation/via_template.py
@@ -39,7 +39,11 @@ class ViaTemplateActivator(Activator):
     def _generate(self, replacements, templates, to_folder, creator):
         for template in templates:
             text = self.instantiate_template(replacements, template, creator)
-            (to_folder / template).write_text(text, encoding="utf-8")
+            dest = to_folder / self.as_name(template)
+            dest.write_text(text, encoding="utf-8")
+
+    def as_name(self, template):
+        return template.name
 
     def instantiate_template(self, replacements, template, creator):
         # read text and do replacements

Integration with virtualenvwrapper
Congratulations on the rewrite.

I notice that `virtualenvwrapper` doesn't integrate with the new beta:

```
$ mkvirtualenv foo
ERROR: Environment '/Users/brettmz/.virtualenvs/foo' does not contain an activate script.
```

Sure enough - I believe it is looking for a script `activate` - but the script file now depends on the shell - `activate.sh` etc. 

It would be good if this could work somehow - would it be reasonable to create / link a default `activate` script for this case?  Or should virtualenvwrapper be updated?
diff --git a/tests/unit/activation/test_bash.py b/tests/unit/activation/test_bash.py
index d5d8ad9b..b5ff9285 100644
--- a/tests/unit/activation/test_bash.py
+++ b/tests/unit/activation/test_bash.py
@@ -7,7 +7,7 @@ def test_bash(raise_on_non_source_class, activation_tester):
     class Bash(raise_on_non_source_class):
         def __init__(self, session):
             super(Bash, self).__init__(
-                BashActivator, session, "bash", "activate.sh", "sh", "You must source this script: $ source "
+                BashActivator, session, "bash", "activate", "sh", "You must source this script: $ source "
             )
 
     activation_tester(Bash)

pip install -e .[dev]
parse_log_pytest
pytest
pytest coverage pytest-mock pytest-env
3.8
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
appdirs==1.4.4
coverage==7.6.1
exceptiongroup @ file:///croot/exceptiongroup_1706031385326/work
filelock==3.16.1
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
packaging @ file:///croot/packaging_1720101850331/work
pluggy==1.5.0
pytest==8.3.5
pytest-env==1.1.5
pytest-mock==3.14.0
six==1.17.0
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
-e git+https://github.com/pypa/virtualenv.git@599907870e9a501224cf603af863c712e581c752#egg=virtualenv

name: virtualenv
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - exceptiongroup=1.2.0=py38h06a4308_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - packaging=24.1=py38h06a4308_0
  - pip=24.2=py38h06a4308_0
  - python=3.8.20=he870216_0
  - readline=8.2=h5eee18b_0
  - setuptools=75.1.0=py38h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py38h06a4308_0
  - wheel=0.44.0=py38h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - appdirs==1.4.4
      - coverage==7.6.1
      - filelock==3.16.1
      - pluggy==1.5.0
      - pytest==8.3.5
      - pytest-env==1.1.5
      - pytest-mock==3.14.0
      - six==1.17.0
      - virtualenv==20.0.0b1
prefix: /opt/conda/envs/virtualenv

tests/unit/activation/test_bash.py::test_bash
src/virtualenv/activation/bash/__init__.py src/virtualenv/activation/via_template.py
src/virtualenv/activation/bash/__init__.py src/virtualenv/activation/via_template.py