Search code examples
permissionsbashenscript

Permission denied when adding enscript command as alias in bash_profile


Via this post, I am using the following command to export all .java files recursively in a directory to PDF form (files.pdf):

enscript -r -1 --file-align=2 --font=Courier7 --pretty-print=java --line-numbers -o - `find . -name '*.java'` | ps2pdf - files.pdf

This works fine. However, when I add the following line to my bash_profile:

alias printJavaFiles="enscript -r -1 --file-align=2 --font=Courier7 --pretty-print=java --line-numbers -o - `find . -name '*.java'` | ps2pdf - files.pdf"

and source the bash_profile, running printJavaFiles gives me a permission denied error for each .java file that I am trying to print, like so:

bash: ./datastructuretradeoffs/Main.java: Permission denied
bash: ./graphs/Main.java: Permission denied
bash: ./linkedlists/ListNode.java: Permission denied
bash: ./linkedlists/Main.java: Permission denied
bash: ./recursion/Main.java: Permission denied
bash: ./sorting/BinarySearch.java: Permission denied
bash: ./sorting/MergeSort.java: Permission denied
bash: ./stacksqueues/Main.java: Permission denied
bash: ./stacksqueues/MyQueue.java: Permission denied
bash: ./stacksqueues/Node.java: Permission denied
bash: ./stacksqueues/Queue.java: Permission denied
bash: ./stacksqueues/SetOfStacks.java: Permission denied
bash: ./stacksqueues/Stack.java: Permission denied
bash: ./strings/Main.java: Permission denied
bash: ./trees/BinaryTree.java: Permission denied
bash: ./trees/BTreePrinter.java: Permission denied
bash: ./trees/ExampleTrees.java: Permission denied
bash: ./trees/Main.java: Permission denied
bash: ./trees/TreeNode.java: Permission denied

Any ideas? Thanks.


Solution

  • Because you're using double quotes when you define the alias, the inner backticks are executed immediately. Use single quotes to define the alias:

    alias printJavaFiles='enscript ... -o - $(find . -name "*.java") | ps2pdf - files.pdf'
    # changes ...........^..................^^.............^......^^.....................^
    

    With what you have, the alias looks like:

    alias printJavaFiles="enscript ... -o - ./a.java
    ./b.java
    ./c.java | ps2pdf - files.pdf"
    

    Which illustrates where all the permission denied errors come from.