Differences between revisions 9 and 10
Revision 9 as of 2007-03-20 00:34:41
Size: 1943
Editor: pD9E48914
Comment: possible answer to question about output capturing without starting subshell
Revision 10 as of 2007-09-19 00:51:13
Size: 2657
Editor: GreyCat
Comment: clean up several things
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:
If you want to help with the BashFaq, you could try to answer one of the following questions. Just answer it, copy it to the BashFaq page, and remove the question here. If you want to help with the BashFAQ, you could try to answer one of the following questions. Just answer it, copy it to a new subpage of the BashFAQ page (e.g. [:BashFAQ/101:]), and remove the question here.
Line 10: Line 10:
  * It's also BashFaq #45 now.   * It's also [:BashFAQ#faq45:Bash FAQ #45] now.
  * It's also covered in ProcessManagement.
Line 12: Line 13:
  * {{{getopts}}}, or a while/shift loop (see BashFaq #35)   * {{{getopts}}}, or a while/shift loop (see [:BashFAQ#faq35:Bash FAQ #35])
Line 14: Line 15:
  * Answer: {{{eval}}}
  * If {{{othervar}}} is an integer, use an array instead.
  * Answer: {{{eval}}} -- see also [:BashFAQ#faq6:Bash FAQ #6] and the warnings in [:BashFAQ#faq48:#48].
  * If {{{othervar}}} is an integer, use an [:BashFAQ#faq5:array] instead.
Line 17: Line 18:
  * This can't be done in any straightforward manner because there's no hook in Bash to execute arbitrary code after a user presses Enter but before a command is executed. The DEBUG trap is triggered after each command, and the PS1 variable is triggered when a prompt is displayed, which is also after the command, rather than before.
Line 18: Line 20:
  * date -d'yesterday' # requires GNU date   * date -d'yesterday' # GNU date
  * date -r $(( $(date +%s) - 86400 )) # OpenBSD date
Line 20: Line 23:
  * gdate -d "1970-01-01 UTC + $time seconds"
  * something involving awk and strftime()
  * perl -e "print scalar localtime $time, \"\n\""
 * How to redirect stderr to a pipeline? Now BashFaq #47
  * [:BashFAQ#faq70:FAQ #70]
 * How to redirect stderr to a pipeline? Now [:BashFAQ#faq47:Bash FAQ #47]
Line 30: Line 31:
   Commands in a process substitution ( >(cmd) or <(cmd) ) are definitely run in a subshell. I'm not sure I understand what this question is really asking. Maybe it's related to [:BashFAQ#faq84:FAQ 84].

Bash Open Questions

If you want to help with the BashFAQ, you could try to answer one of the following questions. Just answer it, copy it to a new subpage of the BashFAQ page (e.g. [:BashFAQ/101:]), and remove the question here.

  • How can I redirect the output of the script to both standard output and a log file?
    • Duplicating fds is not sufficient, because it duplicates the file descriptor number, not the data.
    • But you can still use tee: exec > >(tee log)

  • Somewhere the content of variables in my script lose whitespace.
  • How can I ensure that only once instance of my script is running at a time?
    • Answer: e.g. lockfile. This should be answered in the UnixFaq

    • It's also [:BashFAQ#faq45:Bash FAQ #45] now.
    • It's also covered in ProcessManagement.

  • How can I handle command line arguments in a shell script?
    • getopts, or a while/shift loop (see [:BashFAQ#faq35:Bash FAQ #35])

  • How can I have variable variables, e.g. myvar=prefix$othervar?
    • Answer: eval -- see also [:BashFAQ#faq6:Bash FAQ #6] and the warnings in [:BashFAQ#faq48:#48].

    • If othervar is an integer, use an [:BashFAQ#faq5:array] instead.

  • How can I make bash set the xterm title to the command it is currently executing?
    • This can't be done in any straightforward manner because there's no hook in Bash to execute arbitrary code after a user presses Enter but before a command is executed. The DEBUG trap is triggered after each command, and the PS1 variable is triggered when a prompt is displayed, which is also after the command, rather than before.
  • How to determine Yesterday's date?
    • date -d'yesterday' # GNU date
    • date -r $(( $(date +%s) - 86400 )) # OpenBSD date
  • How to convert Unix time stamps to a date (and vice versa)?
    • [:BashFAQ#faq70:FAQ #70]
  • How to redirect stderr to a pipeline? Now [:BashFAQ#faq47:Bash FAQ #47]
    • command 2>&1 | command

    • To discard stdout entirely: command 2>&1 >/dev/null | command

  • How can I redirect file names using sequential numbers to avoid overwriting existing ones?
    • mv --backup=numbered # requires GNU mv
  • How can I set the output of a command to a variable without executing a subshell (i.e. $() ) or writing to a file and reading it back?
    • i think this does the job, have not had time to test: http://tldp.org/LDP/abs/html/process-sub.html

      • Commands in a process substitution ( >(cmd) or <(cmd) ) are definitely run in a subshell. I'm not sure I understand what this question is really asking. Maybe it's related to [:BashFAQ#faq84:FAQ 84].

BashOpenQuestions (last edited 2023-06-23 18:42:54 by larryv)