creating an alias of a command with plenty special characters

Hello all, I wan to create an alias of this command: alias dockps = "docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}""

The syntax for creating an alias is: alias $COMMAND = "docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}""

However, since there are quote marks, I assume they neet to be escaped with \. But in the case above, I'm getting the errors in fish and bash.

Fish error: $ alias dockps = "docker ps --format \"table {{.ID}} {{.Names}} {{.Status}} {{.Ports}}\""

alias: expected <= 2 arguments; got 3

Bash error: $ alias dockps = "docker ps --format \"table {{.ID}} {{.Names}} {{.Status}} {{.Ports}}\"" bash: alias: dockps: not found bash: alias: =: not found bash: alias: docker ps --format "table {{.ID}} {{.Names}} {{.Status}} {{.Ports}}": not found

What am I doing wrong?

Thanks in advance!

Edit: For fish shell users out there, this can be accomplished by using func: $ function dockerps docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" end $ funcsave dockerps

I'm leaving the question up as the question with escape characters is still relevant and can be a learning resouce.

24 points · 8 comments · view on lemmy.world

8 Comments

clmbmb@lemmy.dbzer0.com · 19 pts · 2y (1 reply)

As the others have said, your first issue is using blank spaces before and after =

Then, when you need to use double quotes in a command, the alias should be defined with single quotes, like this:

\$&nbsp;alias&nbsp;dockps='docker&nbsp;ps&nbsp;--format&nbsp;"table&nbsp;{{.ID}}&nbsp;&nbsp;{{.Names}}&nbsp;&nbsp;{{.Status}}&nbsp;&nbsp;{{.Ports}}"'
krash@lemmy.ml · 6 pts · 2y

Thank you (and all others who replied), this worked flawlessly :-)

tkk13909@sopuli.xyz · 3 pts · 2y

Try using 'apostrophes' for the outer set of quotes and see if that works

PlusMinus@lemmy.world · 3 pts · 2y (1 reply)

Just a thought: It should be possible to save the default ps output does that not fit your use case better?

man 5 docker-config-json

https://man.archlinux.org/man/extra/docker/docker-config-json.5.en

krash@lemmy.ml · 2 pts · 2y

OMG! I didn't even know about this, thanks! Will look into it, would be awesome to have ps command spit out things like I want them by default :-)

humanplayer2@lemmy.ml · 2 pts · 2y (2 replies)

I think you have to alternate the quotations you use between doubles and singles, pairwise. Else the first pair is closed after --format.

So you have to use a pattern like "command level 1 'level 2 "level 3" more level 2' more level 1"

Does that make sense?

friend_of_satan@lemmy.world · 2 pts · 2y (1 reply)
[ removed ]
humanplayer2@lemmy.ml · 2 pts · 2y

TIL! Thank you!

JDubbleu@programming.dev · 1 pts · 2y

Not at my computer so I can't double check, but I believe you can replace the outer double quotes with single quotes. I'd also remove the spaces before and after the equal sign for the alias. I don't know about fish but I know bash doesn't like when you add spaces there.