24 KiB
RVCTL CLI
Plik opisuje przełączniki i listę komend skryptu rvctl.
Model katalogów
Repo oryginalne trzymamy poza workspace:
~/dev/edu/repos/rv
Workspace służy do klonów roboczych i ćwiczeń:
~/dev/workspace/rv
Typowy układ:
~/dev/edu/repos/rv/rv-launcher
~/dev/edu/repos/rv/rv32i-hazard3-env
~/dev/edu/repos/rv/series/<seria>/<karta>
~/dev/workspace/rv/tools/rv-launcher
~/dev/workspace/rv/tools/rv32i-hazard3-env
~/dev/workspace/rv/series/<seria>/<karta>
rvctl czyta karty z series_root w workspace. Tool repo
rv32i-hazard3-env wybiera najpierw z workspace, a potem z fallbacku
~/dev/edu/repos/rv, jeśli taki klon roboczy jeszcze nie istnieje.
Karty pracy też są rozdzielone:
original_series_rootwskazuje repo źródłowe kart, na przykład~/dev/edu/repos/rv/seriesseries_rootwskazuje klony testowe w workspace, na przykład~/dev/workspace/rv/series
Komendy launchera pracują na series_root, czyli na klonach testowych.
Pobranie repo i przełączenie gałęzi
Repo treningowe launchera trzymaj pod:
~/dev/workspace/rv/tools/rv-launcher
Podstawowy bootstrap wygląda tak:
mkdir -p ~/dev/workspace/rv/tools
cd ~/dev/workspace/rv/tools
git clone http://77.90.8.171:3001/edu-tools/rv-launcher.git
cd rv-launcher
Główne pliki CLI:
./rvctl
rvctl.py
rvctl jest jedynym publicznym entrypointem. rvctl.py jest implementacją
uruchamianą przez wrapper i nie wymaga osobnego wywoływania przez ucznia.
Uruchomienie bez argumentów pokazuje tabelaryczny skrót komend:
./rvctl
./rvctl tokens
./rvctl help tokens
Autoryzacja
Masz dwie drogi.
Droga 1: remote r1 z tokenem w URL
To jest wariant dydaktyczny, jeśli uczeń ma ćwiczyć ręczne dodawanie remota z
tokenem do zdalnego endpointu. Jeśli launcher zobaczy URL w formacie
http://LOGIN:TOKEN@..., zapisze ten token lokalnie do tokens/tokens.json.
Przykład:
git remote add r1 http://u1:TOKEN@77.90.8.171:3001/edu-tools/rv-launcher.git
git fetch r1 main
git switch --track -c main r1/main
Droga 2: lokalny tokens/tokens.json
Przed operacjami wymagającymi autoryzacji dodaj lokalny token do:
~/dev/workspace/rv/tokens/tokens.json
Minimalny format pliku:
{
"version": 3,
"tokens": [
{
"id": "r1",
"value": "TU_WSTAW_TOKEN",
"server": {
"type": "gitea",
"endpoint": "http://77.90.8.171:3001",
"scheme": "http",
"host": "77.90.8.171",
"port": 3001
},
"user": "u1",
"org": "edu-tools",
"repo": "rv-launcher"
}
]
}
Ten plik powinien być lokalny, niewersjonowany i mieć prawa 600.
Przykład:
mkdir -p ~/dev/workspace/rv/tokens
chmod 700 ~/dev/workspace/rv/tokens
chmod 600 ~/dev/workspace/rv/tokens/tokens.json
Wariant z tokens/tokens.json jest wygodniejszy wtedy, gdy launcher ma
sam wykonywać clone, fetch i push, albo gdy użytkownik po zajęciach chce
pracować z wieloma repo na swoim koncie bez wpisywania tokena do każdego
remota.
Fetch i switch
Domyślna gałąź launchera to main.
Po sklonowaniu:
git fetch origin main
git switch main
git pull --ff-only
Wariant przez r1:
git fetch r1 main
git switch --track -c main r1/main
git pull --ff-only r1 main
Jeśli chcesz wejść na inną gałąź, na przykład feat/x, użyj:
git fetch origin feat/x
git switch --track -c feat/x origin/feat/x
Wariant przez r1:
git fetch r1 feat/x
git switch --track -c feat/x r1/feat/x
Wywołanie główne
./rvctl [--config PATH] <komenda> [opcje]
Globalne przełączniki:
--config PATHUżywa innego plikuworkspace.json.
Pomoc tabelaryczna:
./rvctl
./rvctl help
./rvctl tokens
./rvctl help tokens
Szczegółowy help parsera:
./rvctl --help
./rvctl <komenda> --help
./rvctl tokens <komenda> --help
Komendy:
show-configlist-serieslist-cards [series]series listseries show SERIESseries fetch SERIES [--dry-run]series cards list SERIESseries cards show SERIES CARDseries cards fetch SERIES CARDseries cards submission SERIES CARD --class NAMEseries cards tasks list SERIES CARDseries cards tasks show SERIES CARD TASKseries cards tasks switch SERIES CARD TASKtasks list [CARD|SERIES CARD]tasks show TASK|CARD TASK|SERIES CARD TASKtasks switch TASK|CARD TASK|SERIES CARD TASKtokens scantokens comparetokens readtokens statstokens writetokens updatesubmission [series] [card]tmux-container [series] [card]
show-config
Wypisuje rozwiązane ścieżki z konfiguracji.
Typowy format:
config_path<TAB>...
original_root<TAB>...
original_series_root<TAB>...
workspace_root<TAB>...
series_root<TAB>...
socket_root<TAB>...
token_path<TAB>...
tools_root<TAB>...
git_base_url<TAB>...
git_source_org<TAB>...
git_answer_org<TAB>...
git_source_remote<TAB>...
git_answer_remote<TAB>...
git_origin_remote<TAB>...
git_fallback_branch<TAB>...
tools_root_candidates
...
Przykład:
./rvctl show-config
series list
Listuje serie dostępne w źródłach i workspace. Komenda tworzy series_root,
jeżeli katalog jeszcze nie istnieje.
Format wyjścia:
<series_id><TAB><karty_w_źródłach><TAB><karty_w_workspace><TAB><workspace_path>
Przykład:
./rvctl series list
series show SERIES
Pokazuje szczegóły jednej serii.
Argumenty:
SERIESId serii, na przykładinf.
Format wyjścia:
series<TAB>...
source_path<TAB>...
workspace_path<TAB>...
cards_count<TAB>...
cards<TAB>...
series fetch SERIES
Pobiera albo aktualizuje wszystkie karty z serii.
Argumenty:
SERIESId serii, na przykładinf.
Przełączniki:
--dry-runPokazuje plan bez klonowania repo i bez zmian w token store.
Przykład:
./rvctl series fetch inf --dry-run
series cards list SERIES
Listuje karty w wybranej serii.
Argumenty:
SERIESId serii, na przykładinf.
Format wyjścia:
<card><TAB><repo><TAB><source|workspace><TAB><tytuł_z_README>
Przykład:
./rvctl series cards list inf
series cards show SERIES CARD
Pokazuje szczegóły jednej karty.
Argumenty:
SERIESId serii, na przykładinf.CARDPełna nazwa repo albo unikalny fragment, na przykładbss.
Format wyjścia:
series<TAB>...
card<TAB>...
repo<TAB>...
source_path<TAB>...
workspace_path<TAB>...
source_remote<TAB>...
source_url<TAB>...
answer_remote<TAB>...
answer_url<TAB>...
tasks<TAB>...
series cards fetch SERIES CARD
Pobiera kartę z repo źródłowego do series_root. CARD może być pełną nazwą
repo albo unikalnym fragmentem, na przykład bss.
Argumenty:
SERIESId serii, na przykładinf.CARDPełna nazwa repo albo unikalny fragment, na przykładbss.
Przełączniki:
--dry-runPokazuje plan bez klonowania repo, bez zapisu tokenar1ai bez ustawiania remota odpowiedzi.
./rvctl series cards fetch inf bss
Po pobraniu komenda ustawia:
r1na repo źródłowe wedu-infr1ana repo pracy wc2025-1a-inf
r1a jest tworzony z tokena r1 i wskazuje na repo o tej samej nazwie co
karta.
series cards submission SERIES CARD
Alias funkcjonalny dla submission, ale z jawnym namespace kart.
Argumenty:
SERIESId serii, na przykładinf.CARDPełna nazwa repo albo unikalny fragment, na przykładbss.
Przełączniki:
--class NAMEId klasy albo grupy.--nick NAMENick ucznia. Jeżeli go nie podasz,rvctlbierze użytkownika ze store tokenów.--task TASKZadanie używane do zbudowania domyślnej nazwy brancha. Domyślniedefaults.taskzworkspace.json.--branch NAMENadpisuje nazwę brancha odpowiedzi. Bez tego branch ma format<login>T<numer_zadania>a, na przykładu1T1a.--date YYYY-MM-DDData zajęć widoczna w planie.--source-url URLNadpisuje URL repo źródłowego.--applyZapisuje remotesr1ir1aw repo karty.
Przykład:
./rvctl series cards submission inf bss --class c2025-1a-inf --apply
series cards tasks list SERIES CARD
Listuje zadania pobranej karty. rvctl rozpoznaje pliki lub katalogi task*
w src/tasks, a także katalogi task* bezpośrednio w korzeniu karty.
Argumenty:
SERIESId serii, na przykładinf.CARDPełna nazwa repo albo unikalny fragment, na przykładbss.
./rvctl series cards tasks list inf bss
series cards tasks show SERIES CARD TASK
Pokazuje szczegóły jednego zadania.
Argumenty:
SERIESId serii, na przykładinf.CARDPełna nazwa repo albo unikalny fragment, na przykładbss.TASKPełna nazwa zadania albo unikalny fragment, na przykładtask1.
./rvctl series cards tasks show inf bss task1
series cards tasks switch SERIES CARD TASK
Tworzy albo przełącza lokalny branch pracy dla zadania.
Argumenty:
SERIESId serii, na przykładinf.CARDPełna nazwa repo albo unikalny fragment, na przykładbss.TASKPełna nazwa zadania albo unikalny fragment, na przykładtask4albo4.
Przełączniki:
--branch NAMENadpisuje automatyczną nazwę brancha.--dry-runPokazuje plan bez przełączania brancha.
Domyślna nazwa brancha powstaje z użytkownika w tokens.json, numeru zadania i
końcówki a. Dla użytkownika u1 i zadania task4_stack_strlen będzie to
u1T4a. Komenda ustawia też upstream brancha na r1a/u1T4a.
./rvctl series cards tasks switch inf bss 4
tasks list
Skrót do listowania zadań z domyślnej karty z workspace.json.
./rvctl tasks list
Opcjonalnie można wskazać kartę albo serię i kartę:
./rvctl tasks list bss
./rvctl tasks list inf bss
tasks show TASK
Skrót do podglądu zadania z domyślnej karty.
./rvctl tasks show 4
./rvctl tasks show bss 4
./rvctl tasks show inf bss 4
tasks switch TASK
Skrót do przełączenia na branch odpowiedzi dla zadania z domyślnej karty.
./rvctl tasks switch 4
Ta komenda działa tak samo jak pełna forma:
./rvctl series cards tasks switch inf bss 4
list-series
Alias kompatybilności dla series list.
./rvctl list-series
list-cards [series]
Alias kompatybilności dla series cards list SERIES.
Argumenty:
seriesOpcjonalne id serii, na przykładinf. Jeśli go brak, brana jest domyślna seria zworkspace.json.
Przykłady:
./rvctl list-cards
./rvctl list-cards inf
tokens scan
Czyta remote URL-e w repo i pokazuje diagnostyczną tabelę git remotes:
auth, plain i unsupported. Nie porównuje ich z tokens.json. Komenda
jest read-only.
Przełączniki:
--repo PATHŚcieżka wewnątrz docelowego repo. Domyślnie repo zawierającervctl.--server ENDPOINTPokazuje tylko wpisy z danego endpointu.
Typowy wynik:
remotes
item remote kind server proto host org repo user token result url
---- ------ ----------- ------ ----- ------------------ --------- ----------- ---- ------------ -------------- --------------------------------------
1 r1 auth gitea http 77.90.8.171:3001 edu-tools rv-launcher u1 e59cc...13be found http://77.90.8.171:3001/edu-tools/...
Przykład:
./rvctl tokens scan
./rvctl tokens scan --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
tokens compare
Czyta remote URL-e w repo oraz lokalny tokens.json, łączy wpisy w pary po
endpoincie, nazwie remota, token id, wartości tokena, org i repo, a potem
pokazuje jeden logiczny wiersz na token. Komenda jest read-only.
Przełączniki:
--repo PATHŚcieżka wewnątrz docelowego repo. Domyślnie repo zawierającervctl.
Typowy wynik:
tokens
item server proto host org repo user remote token_ref token valid scope org repo
---- ------ ----- ------------------ --------- ----------- ---- ------ --------- ------------ ------------------- aAimnopru oawrc- oawr--
1 gitea http 77.90.8.171:3001 edu-tools rv-launcher u1 r1 r1 * e59cc...13be forever wwwwwwwww +++++ ++++
token_ref jest komórką stałej szerokości: nazwa tokena jest po lewej, a marker
po prawej. Nazwa tokena jest taka sama jak nazwa git remote, np. r1. Marker
* oznacza, że remote i tokens.json są zgodne. Marker R oznacza token tylko
w remote, a S token tylko w tokens.json.
Maski uprawnień:
scopema pozycjeaAimnopru: activitypub, admin, issue, misc, notification, organization, package, repository, user- w
scope:woznacza read/write,rread,-brak dostępu orgma pozycjeoawrc: owner, admin, write, read, create reporepoma pozycjeoawr: owner, admin, write, read+oznacza włączone,-wyłączone,?nie wczytano,!błąd wczytaniavalidpokazujeforever, lokalneexpires_at,invalid,?albo!
Przykład:
./rvctl tokens compare
./rvctl tokens compare --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
tokens list store|remote|both
Wypisuje jedno źródło bez porównywania go z drugim. list jest read-only:
pokazuje co jest w tokens.json, co jest w git remote albo oba źródła jako
osobne wiersze. compare służy do porównania zgodności.
Przełączniki:
--repo PATHRepo, z którego listowane są git remotes. Domyślnie repo zawierającervctl.--server ENDPOINTOgranicza wynik do jednego endpointu.
Typowy wynik:
tokens
item source kind server proto host org repo user remote token valid scope org repo
---- ------ ----- ------ ----- ------------------ --------- ----------- ---- ------ ------------ ------------------- aAimnopru oawrc- oawr--
1 store auth gitea http 77.90.8.171:3001 edu-tools rv-launcher u1 r1 e59cc...13be forever --------- +++++ ++++
2 remote auth gitea http 77.90.8.171:3001 edu-tools rv-launcher u1 r1 e59cc...13be
Przykłady:
./rvctl tokens list store
./rvctl tokens list remote
./rvctl tokens list both
tokens add REMOTE_ID
Dodaje pusty szkielet tokena do tokens.json. REMOTE_ID musi być taki sam
jak nazwa git remote, np. r1. Pole value jest puste i trzeba je uzupełnić
ręcznie przed użyciem tokena.
Przełączniki:
--server ENDPOINTEndpoint serwera. Domyślniegit.base_urlzworkspace.json.--value TOKENOpcjonalna wartość tokena. Domyślnie pusta.--user NAMELogin używany w URL-u auth, np.u1.--remote NAMEAlias zgodności. Jeśli podany, musi być taki sam jakREMOTE_ID.--org NAMEOpcjonalna organizacja dla remota.--repo NAMEOpcjonalne repo dla remota.--dry-runPokazuje plan bez zapisu.
Przykłady:
./rvctl tokens add r1
./rvctl tokens add r1 --user u1 --org edu-tools --repo rv-launcher
tokens sync remote REMOTE_ID
Czyta dane auth z git remote REMOTE_ID i zapisuje je do tokens.json. Nie
pobiera metadanych z API.
Przełączniki:
--repo PATHŚcieżka wewnątrz docelowego repo. Domyślnie repo zawierającervctl.--dry-runPokazuje plan bez zapisu.
Przykład:
./rvctl tokens sync remote r1
./rvctl tokens sync remote r1 --repo ~/dev/workspace/rv/tools/rv-launcher
tokens sync store REMOTE_ID
Zapisuje dane auth z rekordu REMOTE_ID w tokens.json do git remote o tej
samej nazwie. Jeśli remote jeszcze nie istnieje, URL jest budowany z pól
server.endpoint, org i repo w tokens.json.
Jeżeli repo ma tylko remote origin wskazujący ten sam URL, sync store
automatycznie przemianuje origin na REMOTE_ID przed wpisaniem credentials.
Przełączniki:
--repo PATHŚcieżka wewnątrz docelowego repo. Domyślnie bieżący katalog.--url URLOpcjonalny URL remota. Nadpisuje URL zbudowany ztokens.json.--server ENDPOINTEndpoint serwera ztokens.json.--replaceNadpisuje inne dane auth już wpisane w remote URL.--dry-runPokazuje plan bez zapisu.
Przykład:
./rvctl tokens sync store r1 --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
tokens remove store|remote|both REMOTE_ID
Usuwa rekord z tokens.json, git remote albo oba miejsca.
Domyślnym repo dla remote i both jest repo, w którym leży rvctl. Inne
repo można wskazać przez --repo PATH.
Przełączniki:
--repo PATHRepo, z którego ma być usunięty git remote. Domyślnie repo zawierającervctl.--server ENDPOINTEndpoint serwera, jeślitokens.jsonma kilka rekordów o tym samymid.--dry-runPokazuje plan bez usuwania.
Przykłady:
./rvctl tokens remove store r1
./rvctl tokens remove remote r1
./rvctl tokens remove both r1
./rvctl tokens remove remote r1 --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
tokens read
Pokazuje zawartość tokens/tokens.json w podziale na endpointy serwerów.
Przełączniki:
--server ENDPOINTOgranicza wynik do jednego endpointu.--show-secretsPokazuje pełne wartości tokenów zamiast maskowania.
Typowy wynik:
token_path<TAB>...
endpoint<TAB>http://77.90.8.171:3001
type<TAB>gitea
scheme<TAB>http
host<TAB>77.90.8.171
port<TAB>3001
tokens<TAB>1
id<TAB>r1<TAB>SE****23
user<TAB>r1<TAB>u1
Przykład:
./rvctl tokens read
./rvctl tokens read --server http://77.90.8.171:3001
tokens stats
Pokazuje statystyki endpointów z repo i tokens.json, a także ich zgodność
względem siebie.
Przełączniki:
--repo PATHŚcieżka wewnątrz repo, z którego mają być odczytane remote URL-e.--server ENDPOINTOgranicza wynik do jednego endpointu.
Typowy wynik:
context
item<TAB>value
repo_root<TAB>...
token_path<TAB>...
tokens
item server proto host org repo user remote token_ref token valid scope org repo
---- ------ ----- ------------------ --------- ----------- ---- ------ --------- ------------ ------------------- aAimnopru oawrc- oawr--
1 gitea http 77.90.8.171:3001 edu-tools rv-launcher u1 r1 r1 * e59cc...13be forever -----w--- +++++ ++++
status
item<TAB>value
in_sync<TAB>1
Przykład:
./rvctl tokens stats --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
tokens write
Wpisuje dane z tokens/tokens.json do wybranego remota repo.
Przełączniki:
--repo PATHŚcieżka wewnątrz docelowego repo. Domyślnie bieżący katalog.--remote NAMENazwa remota do aktualizacji lub utworzenia.--url URLOpcjonalny URL remota. Nadpisuje URL zbudowany ztokens.json.--server ENDPOINTEndpoint serwera ztokens.json.--user NAMEUżytkownik z wybranego endpointu.--token-name NAMERemote id wtokens.json, na przykładr1. Domyślnie wartość--remote.--replaceNadpisuje inne dane auth już wpisane w remote URL.--dry-runPokazuje plan bez zapisu.
Przykład:
./rvctl tokens write --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack --remote r1 --server http://77.90.8.171:3001
tokens update REMOTE_ID
Pobiera z API metadane dla rekordu REMOTE_ID zapisanego w tokens.json.
Nie synchronizuje sekretu z git remote.
Przełączniki:
--server ENDPOINTOpcjonalny wybór endpointu, jeśli ten samREMOTE_IDistnieje dla wielu serwerów.--dry-runPokazuje plan bez zapisu.
Przykład:
./rvctl tokens update r1
tokens update --from ...
Komendy zgodności dla starego modelu kierunkowego.
Przełączniki:
--from remotesSkanuje remote URL-e i zapisuje wynik dotokens.json.--from storeBierze dane ztokens.jsoni wpisuje je do remota repo.--repo PATHŚcieżka wewnątrz repo.--remote NAMEWymagane dla--from store.--url URLOpcjonalny URL dla--from store.--server ENDPOINTOpcjonalny wybór endpointu dla--from store.--user NAMEOpcjonalny wybór usera dla--from store.--token-name NAMEOpcjonalny wybór remote id dla--from store.--replaceNadpisuje inne auth przy--from store.--dry-runPokazuje plan bez zapisu.
Przykłady:
./rvctl tokens update --from remotes --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
./rvctl tokens update --from store --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack --remote r1 --server http://77.90.8.171:3001
submission [series] [card]
Wylicza przepływ oddawania rozwiązań:
r1jako repo z materiałem zedu-infr1ajako repo odpowiedzi wc2025-1a-inf- branch ucznia liczony ze store tokenów i zadania
Nazwa repo odpowiedzi jest taka sama jak nazwa repo źródłowego karty:
<repo_z_edu-inf>
Przykład:
lab-rv32i-strlen-bss-data-stack
Argumenty pozycyjne:
seriesId serii albo pełny selector, na przykładinfalboinf/bss.cardKarta albo unikalny fragment nazwy repo, na przykładbss.
Przełączniki:
--class NAMEId klasy albo grupy, na przykładc2025-1a-inf.--nick NAMENick ucznia. Jeżeli go nie podasz,rvctlbierze użytkownika ze store tokenów.--task TASKZadanie używane do zbudowania domyślnej nazwy brancha. Domyślniedefaults.taskzworkspace.json.--branch NAMENadpisuje domyślną nazwę brancha. Bez tego branch ma format<login>T<numer_zadania>a, na przykładu1T1a.--date YYYY-MM-DDData zajęć. Zostaje w raporcie, ale nie zmienia nazwy repo odpowiedzi.--source-url URLNadpisuje URL repo źródłowego. Bez tego launcher czytar1albooriginz repo karty.--applyDodaje albo aktualizuje remoter1ir1aw repo karty.
Typowy format wyjścia:
selector<TAB>inf/bss
card_path<TAB>...
source_repo<TAB>edu-inf/lab-rv32i-strlen-bss-data-stack
source_remote<TAB>r1
source_url<TAB>http://77.90.8.171:3001/edu-inf/lab-rv32i-strlen-bss-data-stack.git
source_branch<TAB>deploy
answer_remote<TAB>r1a
answer_repo<TAB>c2025-1a-inf/lab-rv32i-strlen-bss-data-stack
answer_url<TAB>http://77.90.8.171:3001/c2025-1a-inf/lab-rv32i-strlen-bss-data-stack.git
student_user<TAB>u1
student_branch<TAB>u1T1a
Przykłady:
./rvctl submission inf bss --class c2025-1a-inf
./rvctl submission inf bss --class c2025-1a-inf --task 4 --apply
./rvctl series cards submission inf bss --class c2025-1a-inf --branch u1T4a
tmux-container [series] [card]
Tworzy nową sesję tmux i uruchamia kontener w pane 0.
Argumenty pozycyjne:
seriesId serii albo pełny selector, na przykładinfalboinf/bss.cardKarta albo unikalny fragment nazwy repo, na przykładbss.
Przełączniki:
--session NAMENadpisuje nazwę sesjitmux.--window NAMENadpisuje nazwę oknatmux.--instance NAMEUstawiaRV_INSTANCEdla wrapperarv.--attachPo utworzeniu sesji robitmux attach.--dry-runNie uruchamiatmux; wypisuje selector, ścieżki i końcową komendę.
Reguły wyboru karty:
tmux-container inf bss-> seriainf, kartabsstmux-container inf/bss-> pełny selectortmux-container bss-> domyślna seria + kartabsstmux-container inf-> seriainf+ domyślna karta- bez argumentów -> domyślna seria i domyślna karta
Przykłady:
./rvctl tmux-container bss --dry-run
./rvctl tmux-container inf bss --session rv-inf-bss
./rvctl tmux-container inf/bss --attach