Nu uitați de alias-uri!

Vorbeam cu un co-worker la un proiect, îi ziceam că am alias-uri pentru o grămadă de porcărioare. Orice comandă din (prea) multe părți folosită des ajunge alias. Iar ăsta se uita la mine cu ochi străini și goi… „cum adică… alias-uri?”

Păi simplu, adaugi alias-uri pentru comenzile folosite frecvent în ~/.bashrc (sau ce shell folosești)

#.bashrc
alias nrd='npm run dev'
alias ni='npm install'
alias ci='composer install'
alias cda='composer dump-autoload'
alias wplua='wp plugin activate'
....

Comanda este ceva mai complexă? Puteți defini și funcții!


if [[ $(grep microsoft /proc/version) ]]; then
    open(){
        ppp=""$(wslpath -wa "$1")""
        explorer.exe "$ppp"
    }

    storm() {
        ppp=""$(wslpath -wa "$1" )""
        # assuming you already have storm.cmd in your Windows PATH
        cmd.exe /c "PhpStorm.cmd $ppp"

        ddevStatus=$(ddev describe -j | jq -r '.raw.status')
        if [[ "$ddevStatus" == "stopped" ]]
        then
            ddev start
        fi

        if { [ -f '.tmuxinator.yml' ] && [ -z "$TMUX" ] }
        then
            tmuxinator
        fi
    }
fi

Etc.

2 Likes

Mie nu imi plac alias-urile fiindca folosesc foarte mult reverse search (CTRL+R), mai bine scripturi dedicate pe proiect.

Pe mac exista si Amazon Q care face autocomplete cu AI la comenzi.

1 Like
### CUSTOM ADDED ####

alias subl='open -a "Sublime Text"'
alias python='python3.12'

alias k='kubectl'
alias prod='export AWS_PROFILE=prod; echo "Changed AWS_PROFILE=prod"'
alias preprod='export AWS_PROFILE=preprod; echo "Changed AWS_PROFILE=preprod"'
alias old='export AWS_PROFILE=old; echo "Changed AWS_PROFILE=old"'

alias kpreprod='kubectl config use-context parkbee-preprod'
alias kprod='kubectl config use-context parkbee-prod'

alias gcb='git branch --show-current | pbcopy'
alias gch='git checkout'

### END CUSTOM ADDED ###
1 Like

Is faine… dar cand ai de lucrat cu vreo 10-20 de VM-uri parca mai mult ma incurca. Aveam la un moment dat git alias-uri… dar am invatat ca e doar mai bine sa folosesti alea default, macar merg oriunde.

Recomand Fish daca vrei autocomplete rapid pentru comenzi.

1 Like

warp terminal anyone?
stiu ca aliasurile sunt independente de asta, dar mie mi-a adus un nivel superior de comoditate.

Cred ca m-ar incurca mai mult un AI sa execut niste comenzi… Nu cred ca AI-ul de acum e potrivit pentru terminal. Poate mai incolo cand nu avem doar LLM-uri.

Putin off-topic dar eu am inceput sa folosesc st-term. Toate emulatoarele de terminal imi par prea complexe pentru ce trebuie sa faca (sa afiseze niste text). Dupa multe cautari am gasit unul care e simplu, rapid si il pot customiza destul pe placul meu.

Eu recomand fig.io, care de fapt a fost inlocuit recent cu Amazon Q (fostul Amazon Code Whisperer). Practic ai Ai la autocomplete.


Apropo, vad ca Amazon Q suporta si Fish

am tot zis să-mi setez aliasuri, dar mereu am lăsat-o pe altădată. mereu îmi aminteam când aveam ceva de făcut. :slight_smile:
acum însă am pus în aplicare în sfârșit.

1 Like

Acum ca-s bagat deep in nixos, pot sa fac urmatoarele chestii tari folosindu-ma si de aliasuri:

  • pot sa am aliasuri per proiect; cand dau cd intr-un director de proiect, automat imi face niste aliasuri sau env vars pentru acel proiect
  • pot sa am aliasuri “globale” adica aceleasi aliasuri pentru toate masinile mele
  • pot sa am aliasuri doar pentru anumite masini; de exemplu pe serverul meu media, am un alias care imi arata cat la suta din spatiu am ocupat de video, cat de imagini si cat de documente
2 Likes

// ------

» alias
.=pwd
..='cd ..'
2..='cd ../..'
3..='cd ../../..'
4..='cd ../../../..'
5..='cd ../../../../..'
busted=/Users/cornel/.luarocks/bin/busted
cda='cd /Users/cornel/.go/src/github.com/$work/project_a'
cdg='cd /Users/cornel/.go/src/github.com/$work/project_g'
dc='docker compose'
dcd='docker compose down'
dcu='docker compose up -d'
diso='date +"%Y%m%d-%H%M%S"'
ports='lsof -iTCP -sTCP:LISTEN -n -P | awk '\''{print $1, substr($0, index($0,$9))}'\'
reload='source ~/.zshrc'
run-help=man
vim=/usr/local/bin/nvim
which-command=whence

și cîteva funcții:

kdesc () {
	kubectl describe deployment $1 | sed -n -e "s/^.*Image:[[:space:]]*//p"
}
kimage () {
	for service in $*
	do
		kubectl get deployment "$service" -o json | jq -r '.spec.template.spec.containers[] | .image'
	done
}
korts () {
	kubectl get svc "$1" -o json | jq '.spec.ports | .[] | .nodePort'
}
kpods () {
	kubectl get pods | grep "$1" | cut -d\  -f1
}
1 Like

Pentru asta nu ai nevoie de alias. Functioneaza nativ.


Bonus:

cd -

O sa te duca la path-ul anterior

1 Like

nu e mai scurt man?

Nu e chiar un alias dar postarea m-a inspirat așa că poate vă interesează. Săptămâna trecută cred mă uitam pe un repo și încercam să înțeleg ce schimbări s-au întâmplat între două tag-uri și mi-a venit ideea să-i dau lui Chat GPT să-mi facă un sumar. Mi s-a părut foarte utilă chestia așa că mi-am făcut un script.

function git_summary() {
        set +o noclobber

        is_inside_git=$(git rev-parse --is-inside-work-tree)
        if [ "$is_inside_git" != "true" ]; then
                echo "Error, not in git repo"
                return 1
        fi
        changes=$(git log $1..$2 | jq -Rsa .)
        changes=${changes#\"}  # Remove leading double quote
        changes=${changes%\"}  # Remove trailing double quote
        first_part='{
                        "model": "gpt-4o",
                        "messages": [
                        {
                                "role": "user",
                                "content": [
                                        {
                                                "type": "text",
                                                "text": "I will give you logs about git commits and I want you to summarize as best as possible in a release notes format.\n'
        second_part='"
                                        }
                                ]
                        }
                        ],
                "temperature": 1,
                "max_tokens": 2048,
                "top_p": 1,
                "frequency_penalty": 0,
                "presence_penalty": 0,
                "response_format": {
                        "type": "text"
                }
                }'

        temp_file=$(mktemp)
        echo "$first_part$changes$second_part" > $temp_file

        answer=$(curl https://api.openai.com/v1/chat/completions \
                -H "Content-Type: application/json" \
                -H "Authorization: Bearer YOUR-API-KEY" \
                -H "OpenAI-Organization: org-YOUR-ORG" \
                -H "OpenAI-Project: proj_YOUR-PROJ" \
                -d "@$temp_file")
        content=$(echo $answer | jq .choices[0].message.content)
        content=${content#\"}
        content=${content%\"}
        printf '%b\n' "$content"
}

E foarte quick and dirty dar merge! De exemplu am rulat snippet-ul pe Microsoft Terminal repository între ultimele tag-uri și-mi dă următorul text.

git_summary v1.22.2362.0 v1.22.2702.0
# Release Notes

## Version 1.22

### New Features and Enhancements

- **Input Scope Setting**: Added a \"defaultInputScope\" setting that can be configured during startup and supports languages like Chinese. This setting is now accessible under the startup page in the user interface. ([#17953](https://github.com/microsoft/terminal/pull/17953))

- **Color Scheme Resetting**: Expanded the functionality of the `RIS` (hard reset) command to reset changes made to color tables and aliases. This update is a step towards implementing the `OSC` sequences for individual color resets. ([#17879](https://github.com/microsoft/terminal/pull/17879))

- **Localization Updates**: Continued to enhance localization support across the application. ([#17958](https://github.com/microsoft/terminal/pull/17958))

- **Settings UI Improvements**: Enhanced the color contrast for the reset button in the Settings UI and addressed text scaling issues ensuring better UI scaling at 200% text. ([#17912](https://github.com/microsoft/terminal/pull/17912), [#17910](https://github.com/microsoft/terminal/pull/17910))

- **Tab Color Indicator**: Introduced a tab color indicator for the tab switch menu (CTRL+Tab), improving the visual cue for tab navigation. ([#17820](https://github.com/microsoft/terminal/pull/17820))

- **Action IDs for Color Commands**: Incorporated action IDs for color selection commands, which now appear in the command palette. ([#17821](https://github.com/microsoft/terminal/pull/17821))

### Bug Fixes

- **Suggestion Box Handling**: Resolved an issue with the `AutoSuggestBox` event handling, ensuring it only updates on submission rather than suggestion highlight. ([#17961](https://github.com/microsoft/terminal/pull/17961))

- **Buffer and Pane Management**: Fixed a bug causing a crash when closing panes and enhanced the buffer clearing command to work consistently. Also addressed issues preventing crashes when buffers overflow or reflow and restored screen content when it's closed. ([#17886](https://github.com/microsoft/terminal/pull/17886), [#17884](https://github.com/microsoft/terminal/pull/17884))

- **Hex Numpad Support**: Implemented a registry check for `EnableHexNumpad`, ensuring proper activation when configured. ([#17954](https://github.com/microsoft/terminal/pull/17954))

- **Escape Character Handling**: Resolved issues with dropping `Esc` characters from VT responses, ensuring accurate VT sequences processing. ([#17833](https://github.com/microsoft/terminal/pull/17833))

- **Miscellaneous Fixes**: Addressed multiple minor bugs including fixes for focus issues with ConPTY HWND, a Sixel crash related to buffer reflow, and a crash in AppHost::_QuitRequested. ([#17828](https://github.com/microsoft/terminal/pull/17828), [#17951](https://github.com/microsoft/terminal/pull/17951), [#17848](https://github.com/microsoft/terminal/pull/17848))

### General Maintenance

- **Code Cleanup**: Removed unnecessary format calls and deprecated components, and applied deduplication in command history handling. ([#17795](https://github.com/microsoft/terminal/pull/17795), [#17852](https://github.com/microsoft/terminal/pull/17852))

- **Preview Build Features**: Enabled new features such as `Feature_QuickFix` and `Feature_SaveSnippet` in preview builds, offering early access to experimental functionality. ([#17888](https://github.com/microsoft/terminal/pull/17888), [#17881](https://github.com/microsoft/terminal/pull/17881))

These updates reflect our ongoing commitment to enhancing user experience, expanding functionality, and maintaining robust application stability. Enjoy the new version!

Are niște limitări. De exemplu am încercat să rulez și pe repo-ul de linux și se adună cam 100000 de tokeni, iar momentan API-ul OpenAI e limitat la 30000. În cazul ăsta trebuie redus înainte cumva textul și apoi trimis. Dar cred că ăsta e un caz extrem pentru că devii de kernel pun multă informație în descrierea commit-urilor.

1 Like

Bonus la bonus: - este suficient, nu trebuie să scrii cd - :exploding_head:

Apropos de navigare: folosesc wd pentru a pune „bookmarks” în locurile frecvent accesate.


Poți detalia asta? Cum procedezi? Eu folosesc DDEV pe majoritatea proiectelor și mai scriu câte un script pentru el (îl rulez apoi cu ddev my-script). Dar cum nu folosesc la toate proiectele, uneori (parcă?) aș avea nevoie de o alternativă.


Problema asta o am și eu, tot la git :smiley: (din fericire nu folosesc git atât de mult pe remotes să mă deranjeze; iar pe remotes unde folosesc frecvent, mut alias-urile)


PS: dacă aveți nevoie să sincronizați setări sau ceva pe linux: eu folosesc stow.:

  • mut toate setările relevante într-un singur loc (e.g. în ~/dotfiles);
  • stow le face symlinks la ce trebuie, unde trebuie.
2 Likes

Eu am ori package.json si niste scripturi ori am un monorepo.

In fiecare monorepo am incercat sa am ori un runner (nx) ori un makefile sau chiar amandoua, plus git hooks.

Daca dai npm i (sau alternativele) iti instaleaza proiectul si dupa poti folosi ori nx, ori make. (stiu ca exista si alternative la makefile)
Majoritatea comenzilor pe care nu le pot scrie manual in 2 secunde le pun in makefile.

1 Like

Folosesc Termius ca si consola, autocomplete-ul e suficient pentru chestiile simple iar unde am nevoie de ceva mai complex ma folosesc de snippets(le poti rula in oricare terminal). Am acces la cateva sute de vm-uri, unele la comun cu externi, nu ar fi ok sa sincronizam peste tot aceste alias-uri. Pot rula simultan pe mai multe masini virtuale daca e nevoie.

Nu prea folosesc aliasuri, dar scriu multe scripturi care ajung în .local/bin/ la mine, scripturi pe care le duc din instalare în instalare. De exemplu am un script de rebase ceva mai complex, sau niște scripturi cu care mă joc cu instanțele docker.

Dacă comanda e suficient de scurtă prefer să o scriu. Șapte taste salvate nu îmi omoară productivitatea.

1 Like