1

I'm a relatively new user of zsh and don't know too much about shells (unfortunately). Nonetheless, I would like to define an alias in my .bashrc containing a hash. However, zsh doesn't seem to like it. My command would be basically used to replace a string in a LaTeX file with sed, run LaTeX over it and then undo the replacement thus something like

alias tex-build='
sed -i \
  's~\\newcommand{\\command}\[1\]{{here_is_the_command_stuff #1}}~\\newcommand{\\command}\[1\]{}~' \ 
  /path/to/mytexfile.tex && 
latex ... && 
sed -i \
  's~\\newcommand{\\command}\[1\]{}~\\newcommand{\\command}\[1\]{{here_is_the_command_stuff #1}}~' \
  /path/to/mytexfile.tex
'

Could anyone help me to find a way to get this alias running with the hash for the LaTeX command? Thanks in advance!

5
  • 2
    zsh does not read .bashrc. what happens if you put the alias into the zsh configuration file .zshrc in your home directory?
    – thrig
    Commented Aug 18, 2022 at 2:08
  • 1
    You intended to have alias tex-build='quoted level-1 'quoted level-2' /path/to/mytexfile.tex && quoted level-1 'quoted level-2' /path/to/mytexfile.tex'. Most shells will not allow nesting of simple single quotes like that: you'll have to either escape the inner single quotes, or use double quotes as your outer quotes, since you'll really want single quotes protecting your LaTeX command strings as they have lots of characters that have a special meaning for the shell.
    – telcoM
    Commented Aug 18, 2022 at 3:12
  • 2
    Put the command in a function tex-build() {...} or shell script, so that you don't have to worry about nested quoting.
    – Devon
    Commented Aug 18, 2022 at 8:09
  • 1
    @telcoM, no shell could possibly interpret 'a'b'c' as nested quotes. Why would a shell ever consider the second ' as anything but the closing quote for 'a'? Some shells support 'a''b''c' (like rc, es, akanga, zsh -o rcquotes). Some shells support 'a\'b\'c' (like fish), but in any case, you need special syntax to tell it's not a closing quote you want. Commented Aug 18, 2022 at 9:49
  • Further, rather than running sed -i 'stuff' file; latex [stuff]; sed -i 'stuff' file, would it not be simpler to not alter the file, and simply sed 'stuff' file | latex?
    – DopeGhoti
    Commented Aug 18, 2022 at 14:19

1 Answer 1

1

Firstly, zsh won't read .bashrc - that's a resource control file for bash, not zsh; you probably want to put this into .zshrc or your .profile.

Secondly, you can't simply nest quotes of any type. 'a long 'nested' string' is not a string with a nested quote in it, it is the quoted string a long , followed by a bare nested, followed by a quoted string string.

What you are trying to do should more likely be a function. And further, since you are modifying a file, performing a single-use operation on the modified form, and then changing it back, it would be much simpler to not modify the file and just send its modified form down a pipeline, thus:

tex-build() {
  sed \
    's~\\newcommand{\\command}\[1\]{{here_is_the_command_stuff #1}}~\\newcommand{\\command}\[1\]{}~' \ 
    /path/to/mytexfile.tex | latex ...
}

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .