this post was submitted on 20 Jan 2024
24 points (87.5% liked)

Linux

46775 readers
1968 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

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.

all 9 comments
sorted by: hot top controversial new old
[–] [email protected] 19 points 7 months ago (1 children)

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}}"'
[–] [email protected] 6 points 7 months ago* (last edited 7 months ago)

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

[–] [email protected] 3 points 7 months ago

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

[–] [email protected] 3 points 7 months ago (1 children)

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

[–] [email protected] 2 points 7 months ago

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 :-)

[–] [email protected] 2 points 7 months ago (1 children)

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?

[–] [email protected] 1 points 7 months ago* (last edited 7 months ago)

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.