First bash noscript
https://github.com/safesintesi/transient-prompt-bash
https://redd.it/18p4u6y
@r_bash
https://github.com/safesintesi/transient-prompt-bash
https://redd.it/18p4u6y
@r_bash
GitHub
GitHub - safesintesi/transient-prompt-bash: Bare bone implementation of a transient prompt for bash
Bare bone implementation of a transient prompt for bash - safesintesi/transient-prompt-bash
Tree command include contents of a zip file
Is it possible to create a tree of all files in a folder including the contents of zips? Thanks in advance
https://redd.it/18pav4d
@r_bash
Is it possible to create a tree of all files in a folder including the contents of zips? Thanks in advance
https://redd.it/18pav4d
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Writing my first bash noscript -- looking for hints
Hi everyone, I hope you are all doing great!
The idea: I want to create a noscript to move all my screenshots from my desktop to a folder I called Screenshots.
What I did:
I needed a way to grep/find the screenshots on my desktop so I had the following
#SCREENSHOT=$(grep -lR "Screenshot" --include="2023" $DESKTOP)
SCREENSHOT=$(find Screenshot.png)
then I wanted to do a simple mv to my new folder
mv $SCREENSHOT Screenshots
The problem:
I realized a screenshot filename is written as follows: Screenshot 2023-XX-XX at XX.XX.XX
When I send it to mv it interprets this filename as 4 different strings. So it thought to use "tr" to remove the whitespaces like this example... it doesn't work at all.
NAME="Screenshot 2023-12-18 at 21.03.25"
VALUE=$(echo $NAME | tr ':space:' '-')
mv $VALUE Screenshots
This doesn't work because VALUE (Screenshot-2023-12-18-at-21.03.25) doesn't exists. so I need to rename my screenshot when it is on my desktop and then use the mv to its new destination. but how can I do so as mv sees my screenshot filename as 4 distinct elements?
btw-- i m on macos
https://redd.it/18pbz0t
@r_bash
Hi everyone, I hope you are all doing great!
The idea: I want to create a noscript to move all my screenshots from my desktop to a folder I called Screenshots.
What I did:
I needed a way to grep/find the screenshots on my desktop so I had the following
#SCREENSHOT=$(grep -lR "Screenshot" --include="2023" $DESKTOP)
SCREENSHOT=$(find Screenshot.png)
then I wanted to do a simple mv to my new folder
mv $SCREENSHOT Screenshots
The problem:
I realized a screenshot filename is written as follows: Screenshot 2023-XX-XX at XX.XX.XX
When I send it to mv it interprets this filename as 4 different strings. So it thought to use "tr" to remove the whitespaces like this example... it doesn't work at all.
NAME="Screenshot 2023-12-18 at 21.03.25"
VALUE=$(echo $NAME | tr ':space:' '-')
mv $VALUE Screenshots
This doesn't work because VALUE (Screenshot-2023-12-18-at-21.03.25) doesn't exists. so I need to rename my screenshot when it is on my desktop and then use the mv to its new destination. but how can I do so as mv sees my screenshot filename as 4 distinct elements?
btw-- i m on macos
https://redd.it/18pbz0t
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Bash, printf formatting: accented characters ruin the formatting
Let's take the following code. The first command is
#!/bin/bash
text=Security
echo " ......................................................"
printf "%5s %-50s %-5s\n" "." "" "."
printf "%5s %-50s %-5s\n" "." "${text}" "."
printf "%5s %-50s %-5s\n" "." "" "."
This is the output:
......................................................
. .
. Security .
. .
Now let's change the text to Portuguese: "Segurança" instead of "Security", mind the "ç":
#!/bin/bash
text=Segurança
echo " ......................................................"
printf "%5s %-50s %-5s\n" "." "" "."
printf "%5s %-50s %-5s\n" "." "${text}" "."
printf "%5s %-50s %-5s\n" "." "" "."
This is the new output:
......................................................
. .
. Segurança .
. .
The dot at the end of the line of "Segurança" is out of place.
The same behavior can be seen with box drawing characters: take a look at what I had to do to achieve the same formatting (
#!/bin/bash
text=Security
echo " ┌────────────────────────────────────────────────────┐"
printf "%7s %-50s %-5s\n" "│" "" "│"
printf "%7s %-50s %-5s\n" "│" "${text}" "│"
printf "%7s %-50s %-5s\n" "│" "" "│"
To get:
┌────────────────────────────────────────────────────┐
│ │
│ Security │
│ │
I was OK with that, with weird trial and error values to draw the box, but when it comes to text, that can contain accented characters or not, in lots of lines, coming from variables, it is an issue.
Thank you in advance!
https://redd.it/18ph0a5
@r_bash
Let's take the following code. The first command is
echo, just to set the stantards, and the following commands use printf to format the text, as if there was a box around the text:#!/bin/bash
text=Security
echo " ......................................................"
printf "%5s %-50s %-5s\n" "." "" "."
printf "%5s %-50s %-5s\n" "." "${text}" "."
printf "%5s %-50s %-5s\n" "." "" "."
This is the output:
......................................................
. .
. Security .
. .
Now let's change the text to Portuguese: "Segurança" instead of "Security", mind the "ç":
#!/bin/bash
text=Segurança
echo " ......................................................"
printf "%5s %-50s %-5s\n" "." "" "."
printf "%5s %-50s %-5s\n" "." "${text}" "."
printf "%5s %-50s %-5s\n" "." "" "."
This is the new output:
......................................................
. .
. Segurança .
. .
The dot at the end of the line of "Segurança" is out of place.
The same behavior can be seen with box drawing characters: take a look at what I had to do to achieve the same formatting (
%7s instead of %5s), all the definitions in printf had to be changed:#!/bin/bash
text=Security
echo " ┌────────────────────────────────────────────────────┐"
printf "%7s %-50s %-5s\n" "│" "" "│"
printf "%7s %-50s %-5s\n" "│" "${text}" "│"
printf "%7s %-50s %-5s\n" "│" "" "│"
To get:
┌────────────────────────────────────────────────────┐
│ │
│ Security │
│ │
I was OK with that, with weird trial and error values to draw the box, but when it comes to text, that can contain accented characters or not, in lots of lines, coming from variables, it is an issue.
Thank you in advance!
https://redd.it/18ph0a5
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Help with find and exec function
I am trying to find some images and process them but i am not familiar with bash noscripting
https://preview.redd.it/i1dk1gacz88c1.png?width=1717&format=png&auto=webp&s=8a430baf7e70791adefc3c22cb3f1eed1a88a787
https://redd.it/18pvkw5
@r_bash
I am trying to find some images and process them but i am not familiar with bash noscripting
https://preview.redd.it/i1dk1gacz88c1.png?width=1717&format=png&auto=webp&s=8a430baf7e70791adefc3c22cb3f1eed1a88a787
https://redd.it/18pvkw5
@r_bash
The order of the $PATHs matters! Depends on what? And how can I change it?
We are two Debian users, both with the same \~/.profile and \~/.bashrc files with defaults (no changes in them). The only additional line is this in the \~/.bashrc file:
​
export PATH=$PATH:$(xdg-user-dir USER)/.local/bin
By performing the command
​
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/ivan/.local/bin
and him have this:
​
/home/sz/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/sz/.local/bin:/home/sz/.local/bin
​
The result is that my binary symlinked in \~/.local/bin is working, not for him.
If him changes the line in its \~/.profile file from
​
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/sz/.local/bin
​
and the symlink is working as expected.
​
Why all this happens? Why him have to edit the \~/.profile file to reach my results?
https://redd.it/18q8r4q
@r_bash
We are two Debian users, both with the same \~/.profile and \~/.bashrc files with defaults (no changes in them). The only additional line is this in the \~/.bashrc file:
​
export PATH=$PATH:$(xdg-user-dir USER)/.local/bin
By performing the command
echo $PATH I get this:​
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/ivan/.local/bin
and him have this:
​
/home/sz/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/sz/.local/bin:/home/sz/.local/bin
​
The result is that my binary symlinked in \~/.local/bin is working, not for him.
If him changes the line in its \~/.profile file from
PATH="$HOME/.local/bin:$PATH" to PATH="$PATH:$HOME/.local/bin" the result is similar to the mine:​
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/sz/.local/bin
​
and the symlink is working as expected.
​
Why all this happens? Why him have to edit the \~/.profile file to reach my results?
https://redd.it/18q8r4q
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
First noscript with bash
Hey everyone,
I am trying to write a program that calculates the distance between two amino acids in a peptide sequence. I am stuck on an if statement to check if a user's choice of amino acid is found among the amino acid sequence. I know python has a string index like str1[1:n+1\]. But how do I use bash to check if the user's input is among the characters of a string.
​
Code:
​
echo "Enter your peptide sequence: " #To know what sequence to work with from the user
read $peptide_sequence #To sequence as a variable
​
echo "Select atom #1" #to prompt the user to pick an atom among the sequence they selected
read $atom1_select
​
echo "Select atom #2" #same prompt for the next atom
read $atom2_select
\#below I am trying to calculate the distance between the two atoms in the sequence
for amino_acid in ${peptide_sequence:0}
do
if [ $atom1_select==${peptide_sequence:0}\];
then
echo "Atom#1 is $atom1_select"
elif[ $atom2_select==${peptide_sequence:0}\];
then
echo "Atom#2 is $atom2_select"
else
echo "Select an atom from your peptide sequence"
fi
done
https://redd.it/18rpdrx
@r_bash
Hey everyone,
I am trying to write a program that calculates the distance between two amino acids in a peptide sequence. I am stuck on an if statement to check if a user's choice of amino acid is found among the amino acid sequence. I know python has a string index like str1[1:n+1\]. But how do I use bash to check if the user's input is among the characters of a string.
​
Code:
​
echo "Enter your peptide sequence: " #To know what sequence to work with from the user
read $peptide_sequence #To sequence as a variable
​
echo "Select atom #1" #to prompt the user to pick an atom among the sequence they selected
read $atom1_select
​
echo "Select atom #2" #same prompt for the next atom
read $atom2_select
\#below I am trying to calculate the distance between the two atoms in the sequence
for amino_acid in ${peptide_sequence:0}
do
if [ $atom1_select==${peptide_sequence:0}\];
then
echo "Atom#1 is $atom1_select"
elif[ $atom2_select==${peptide_sequence:0}\];
then
echo "Atom#2 is $atom2_select"
else
echo "Select an atom from your peptide sequence"
fi
done
https://redd.it/18rpdrx
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Use MarkdownExec to interactively select and execute fenced code blocks in markdown files.
The ["MarkdownExec (MDE)"](https://github.com/fareedst/markdownexec) application is a tool for executing `bash` code blocks extracted from Markdown (MD) documents. MDE operates in a Ruby and Ubuntu environment, employing Bash for noscript execution.
**Platform Specifications:**
- **Base Platform:** Ruby for Ubuntu systems.
- **Shell Integration:** Incorporates Bash for executing noscripts.
- **Configuration and Metadata Management:** Utilizes YAML for managing configuration and metadata.
- **User Interface:** Boasts a terminal interface with ANSI colors for enhanced readability and engagement.
**Core Functionalities:**
1. **LLM Output Integration:** MDE adeptly reads MD files from LLMs, focusing on identifying and processing `bash` fenced code blocks.
2. **Document Processing and Menu Interface:** Transforms MD text into an accessible format. It distinguishes fenced code blocks, converting them into interactive menu items akin to hyperlinks for straightforward navigation.
3. **Interactive User Experience:** Offers keyboard navigation within the menu, enabling users to execute desired blocks by selecting relevant menu items.
4. **Script Execution and Output Display:** Executes chosen noscripts and presents outputs, utilizing ANSI colors for distinction and emphasis. The menu dynamically updates to reflect changes post-execution.
5. **Application Use Cases:** Suited for executing automated noscripts from LLM recommendations, serving as an interactive educational platform, and assisting developers in rapid prototyping.
6. **Automated Execution via Command Line Arguments:**
- MDE supports automated operation by specifying the document and block names in command-line arguments.
- Designated blocks are executed in order, encompassing navigation and execution within new documents accessed via links or imports.
- When block names are specified, MDE automatically concludes operations post-execution, optimizing batch processes and automation.
**Extended Functionalities:**
1. **Block Naming and Dependencies:**
- Fenced code blocks are identified by type (`bash`) and unique names for effortless referencing.
- MDE accommodates dependencies among code blocks, facilitating execution of prerequisite noscripts before the target noscript.
2. **Code Block Reusability and Document Navigation:**
- **@import Directive:** MDE features an "@import" directive to boost code reusability, allowing the insertion of blocks from other documents at the directive's location, fostering modular coding.
- **Link Block Type:** MDE integrates a "link" block type for seamless document navigation. Execution of this block shifts focus to the specified file, as shown below:
```link :gotomenu
file: menu.md
```
**Customization and Configuration:**
- MDE allows extensive customization, including numerous options for matching source document text, formatting, and coloring output, and personalizing the MDE interface.
- Users can configure MDE settings via configuration files, environment variables, program arguments, and within markdown documents.
**Configuration Sources:**
1. **Environment Variables:** MDE reads the current environment, including configuration in the current and child shells and the current command.
2. **Configuration Files:** MDE accommodates configurations in all shells and supports a dedicated `.mde.yml` file in the current folder, or a specified YAML file.
3. **Program Arguments:** Users can set options directly through command arguments.
4. **Opts Fenced Code Blocks:** MDE recognizes configuration in `opts` blocks, applying settings when the document is loaded or blocks are executed.
**Example Markdown Document:**
These blocks illustrate the use of named and dependent `bash` code blocks and the `link` block type.
```bash :initializeenvironment
# Initial environment setup commands
echo "Initializing environment..."
The ["MarkdownExec (MDE)"](https://github.com/fareedst/markdownexec) application is a tool for executing `bash` code blocks extracted from Markdown (MD) documents. MDE operates in a Ruby and Ubuntu environment, employing Bash for noscript execution.
**Platform Specifications:**
- **Base Platform:** Ruby for Ubuntu systems.
- **Shell Integration:** Incorporates Bash for executing noscripts.
- **Configuration and Metadata Management:** Utilizes YAML for managing configuration and metadata.
- **User Interface:** Boasts a terminal interface with ANSI colors for enhanced readability and engagement.
**Core Functionalities:**
1. **LLM Output Integration:** MDE adeptly reads MD files from LLMs, focusing on identifying and processing `bash` fenced code blocks.
2. **Document Processing and Menu Interface:** Transforms MD text into an accessible format. It distinguishes fenced code blocks, converting them into interactive menu items akin to hyperlinks for straightforward navigation.
3. **Interactive User Experience:** Offers keyboard navigation within the menu, enabling users to execute desired blocks by selecting relevant menu items.
4. **Script Execution and Output Display:** Executes chosen noscripts and presents outputs, utilizing ANSI colors for distinction and emphasis. The menu dynamically updates to reflect changes post-execution.
5. **Application Use Cases:** Suited for executing automated noscripts from LLM recommendations, serving as an interactive educational platform, and assisting developers in rapid prototyping.
6. **Automated Execution via Command Line Arguments:**
- MDE supports automated operation by specifying the document and block names in command-line arguments.
- Designated blocks are executed in order, encompassing navigation and execution within new documents accessed via links or imports.
- When block names are specified, MDE automatically concludes operations post-execution, optimizing batch processes and automation.
**Extended Functionalities:**
1. **Block Naming and Dependencies:**
- Fenced code blocks are identified by type (`bash`) and unique names for effortless referencing.
- MDE accommodates dependencies among code blocks, facilitating execution of prerequisite noscripts before the target noscript.
2. **Code Block Reusability and Document Navigation:**
- **@import Directive:** MDE features an "@import" directive to boost code reusability, allowing the insertion of blocks from other documents at the directive's location, fostering modular coding.
- **Link Block Type:** MDE integrates a "link" block type for seamless document navigation. Execution of this block shifts focus to the specified file, as shown below:
```link :gotomenu
file: menu.md
```
**Customization and Configuration:**
- MDE allows extensive customization, including numerous options for matching source document text, formatting, and coloring output, and personalizing the MDE interface.
- Users can configure MDE settings via configuration files, environment variables, program arguments, and within markdown documents.
**Configuration Sources:**
1. **Environment Variables:** MDE reads the current environment, including configuration in the current and child shells and the current command.
2. **Configuration Files:** MDE accommodates configurations in all shells and supports a dedicated `.mde.yml` file in the current folder, or a specified YAML file.
3. **Program Arguments:** Users can set options directly through command arguments.
4. **Opts Fenced Code Blocks:** MDE recognizes configuration in `opts` blocks, applying settings when the document is loaded or blocks are executed.
**Example Markdown Document:**
These blocks illustrate the use of named and dependent `bash` code blocks and the `link` block type.
```bash :initializeenvironment
# Initial environment setup commands
echo "Initializing environment..."
bash :dataprocessing +initializeenvironment
Use Markdown_Exec to interactively select and execute fenced code blocks in markdown files.
The ["Markdown_Exec (MDE)"](https://github.com/fareedst/markdown_exec) application is a tool for executing `bash` code blocks extracted from Markdown (MD) documents. MDE operates in a Ruby and Ubuntu environment, employing Bash for noscript execution.
**Platform Specifications:**
- **Base Platform:** Ruby for Ubuntu systems.
- **Shell Integration:** Incorporates Bash for executing noscripts.
- **Configuration and Metadata Management:** Utilizes YAML for managing configuration and metadata.
- **User Interface:** Boasts a terminal interface with ANSI colors for enhanced readability and engagement.
**Core Functionalities:**
1. **LLM Output Integration:** MDE adeptly reads MD files from LLMs, focusing on identifying and processing `bash` fenced code blocks.
2. **Document Processing and Menu Interface:** Transforms MD text into an accessible format. It distinguishes fenced code blocks, converting them into interactive menu items akin to hyperlinks for straightforward navigation.
3. **Interactive User Experience:** Offers keyboard navigation within the menu, enabling users to execute desired blocks by selecting relevant menu items.
4. **Script Execution and Output Display:** Executes chosen noscripts and presents outputs, utilizing ANSI colors for distinction and emphasis. The menu dynamically updates to reflect changes post-execution.
5. **Application Use Cases:** Suited for executing automated noscripts from LLM recommendations, serving as an interactive educational platform, and assisting developers in rapid prototyping.
6. **Automated Execution via Command Line Arguments:**
- MDE supports automated operation by specifying the document and block names in command-line arguments.
- Designated blocks are executed in order, encompassing navigation and execution within new documents accessed via links or imports.
- When block names are specified, MDE automatically concludes operations post-execution, optimizing batch processes and automation.
**Extended Functionalities:**
1. **Block Naming and Dependencies:**
- Fenced code blocks are identified by type (`bash`) and unique names for effortless referencing.
- MDE accommodates dependencies among code blocks, facilitating execution of prerequisite noscripts before the target noscript.
2. **Code Block Reusability and Document Navigation:**
- **@import Directive:** MDE features an "@import" directive to boost code reusability, allowing the insertion of blocks from other documents at the directive's location, fostering modular coding.
- **Link Block Type:** MDE integrates a "link" block type for seamless document navigation. Execution of this block shifts focus to the specified file, as shown below:
```link :go_to_menu
file: menu.md
```
**Customization and Configuration:**
- MDE allows extensive customization, including numerous options for matching source document text, formatting, and coloring output, and personalizing the MDE interface.
- Users can configure MDE settings via configuration files, environment variables, program arguments, and within markdown documents.
**Configuration Sources:**
1. **Environment Variables:** MDE reads the current environment, including configuration in the current and child shells and the current command.
2. **Configuration Files:** MDE accommodates configurations in all shells and supports a dedicated `.mde.yml` file in the current folder, or a specified YAML file.
3. **Program Arguments:** Users can set options directly through command arguments.
4. **Opts Fenced Code Blocks:** MDE recognizes configuration in `opts` blocks, applying settings when the document is loaded or blocks are executed.
**Example Markdown Document:**
These blocks illustrate the use of named and dependent `bash` code blocks and the `link` block type.
```bash :initialize_environment
# Initial environment setup commands
echo "Initializing environment..."
```
```bash :data_processing +initialize_environment
The ["Markdown_Exec (MDE)"](https://github.com/fareedst/markdown_exec) application is a tool for executing `bash` code blocks extracted from Markdown (MD) documents. MDE operates in a Ruby and Ubuntu environment, employing Bash for noscript execution.
**Platform Specifications:**
- **Base Platform:** Ruby for Ubuntu systems.
- **Shell Integration:** Incorporates Bash for executing noscripts.
- **Configuration and Metadata Management:** Utilizes YAML for managing configuration and metadata.
- **User Interface:** Boasts a terminal interface with ANSI colors for enhanced readability and engagement.
**Core Functionalities:**
1. **LLM Output Integration:** MDE adeptly reads MD files from LLMs, focusing on identifying and processing `bash` fenced code blocks.
2. **Document Processing and Menu Interface:** Transforms MD text into an accessible format. It distinguishes fenced code blocks, converting them into interactive menu items akin to hyperlinks for straightforward navigation.
3. **Interactive User Experience:** Offers keyboard navigation within the menu, enabling users to execute desired blocks by selecting relevant menu items.
4. **Script Execution and Output Display:** Executes chosen noscripts and presents outputs, utilizing ANSI colors for distinction and emphasis. The menu dynamically updates to reflect changes post-execution.
5. **Application Use Cases:** Suited for executing automated noscripts from LLM recommendations, serving as an interactive educational platform, and assisting developers in rapid prototyping.
6. **Automated Execution via Command Line Arguments:**
- MDE supports automated operation by specifying the document and block names in command-line arguments.
- Designated blocks are executed in order, encompassing navigation and execution within new documents accessed via links or imports.
- When block names are specified, MDE automatically concludes operations post-execution, optimizing batch processes and automation.
**Extended Functionalities:**
1. **Block Naming and Dependencies:**
- Fenced code blocks are identified by type (`bash`) and unique names for effortless referencing.
- MDE accommodates dependencies among code blocks, facilitating execution of prerequisite noscripts before the target noscript.
2. **Code Block Reusability and Document Navigation:**
- **@import Directive:** MDE features an "@import" directive to boost code reusability, allowing the insertion of blocks from other documents at the directive's location, fostering modular coding.
- **Link Block Type:** MDE integrates a "link" block type for seamless document navigation. Execution of this block shifts focus to the specified file, as shown below:
```link :go_to_menu
file: menu.md
```
**Customization and Configuration:**
- MDE allows extensive customization, including numerous options for matching source document text, formatting, and coloring output, and personalizing the MDE interface.
- Users can configure MDE settings via configuration files, environment variables, program arguments, and within markdown documents.
**Configuration Sources:**
1. **Environment Variables:** MDE reads the current environment, including configuration in the current and child shells and the current command.
2. **Configuration Files:** MDE accommodates configurations in all shells and supports a dedicated `.mde.yml` file in the current folder, or a specified YAML file.
3. **Program Arguments:** Users can set options directly through command arguments.
4. **Opts Fenced Code Blocks:** MDE recognizes configuration in `opts` blocks, applying settings when the document is loaded or blocks are executed.
**Example Markdown Document:**
These blocks illustrate the use of named and dependent `bash` code blocks and the `link` block type.
```bash :initialize_environment
# Initial environment setup commands
echo "Initializing environment..."
```
```bash :data_processing +initialize_environment
GitHub
GitHub - fareedst/markdown_exec: Interactively select and execute fenced code blocks in markdown files. Build complex noscripts by…
Interactively select and execute fenced code blocks in markdown files. Build complex noscripts by naming and requiring blocks. Log resulting noscripts and output. Re-run noscripts. - GitHub - fareedst/ma...
# Data processing commands requiring initialized environment
echo "Processing data..."
```
```link :go_to_menu
file: menu.md
```
In this example, the `data_processing` block relies on `initialize_environment`. When selecting `data_processing`, MDE first executes `initialize_environment` to ensure proper setup before proceeding. The `link` block type enables navigation to `menu.md`, offering a structured and interconnected document system. These attributes make MDE an effective tool for managing complex noscript sequences and various applications. The automated execution feature via command-line arguments further enhances MDE's role in batch processing and workflow automation.
https://redd.it/18r1ygi
@r_bash
echo "Processing data..."
```
```link :go_to_menu
file: menu.md
```
In this example, the `data_processing` block relies on `initialize_environment`. When selecting `data_processing`, MDE first executes `initialize_environment` to ensure proper setup before proceeding. The `link` block type enables navigation to `menu.md`, offering a structured and interconnected document system. These attributes make MDE an effective tool for managing complex noscript sequences and various applications. The automated execution feature via command-line arguments further enhances MDE's role in batch processing and workflow automation.
https://redd.it/18r1ygi
@r_bash
Reddit
From the bash community on Reddit: Use Markdown_Exec to interactively select and execute fenced code blocks in markdown files.
Explore this post and more from the bash community
How can i create a new file and run it afterwards without having to chmod it every time?
ive read i can add umask 011 in my zshrc but im still getting the permission issue even though im root.
https://redd.it/18ux7jz
@r_bash
ive read i can add umask 011 in my zshrc but im still getting the permission issue even though im root.
https://redd.it/18ux7jz
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Identifying and then moving folders with only zero-length files?
I have been trying to use Mac Automator with bash shell noscripts to assist with some time consuming file management. One part of the workflow has got me stuck. I've tried asking ChatGPT which has proposed some code, but it either doesn't work at all, or works with errors. Grateful for any advice.
This is my situation:
* I have output\_directory that is full of folders. These folders contain files and sometimes also have multiple layers of sub-folders with files within.
* As part of a space-saving and depulication-prevention workflow, some files have been truncated to 0kb while preserving filename and location. This is done using the Mac terminal command: "find . -type f -exec truncate -s 0 {} \\;"
* I want to identify folders that are comprised ONLY of 0kb files (and any associated sub-folders) and move these entire folders to empty\_folders\_directory. File structure within the moved folder should be maintained.
* If a folder has a mix of 0kb files and non-0kb files the folder should remain in output\_directory.
I'm not quite sure why the code(s) I've tried haven't worked e.g.:
# Check if the folder contains only empty files
if [ -z "$(find "$output_directory/$(basename "$folder")" -mindepth 1 -type f -exec test -s {} \;)" ]; then
# Move the folder to the !empty_folders directory
mv "$output_directory/$(basename "$folder")" "$empty_folders_directory"
echo "Moved $folder to $empty_folders_directory"
e.g.
# Check if there are non-zero-length files within the folder (including sub-folders)
zero_length_files=$(find "$output_directory/$(basename "$folder")" -type f -size +0c)
if [ -z "$zero_length_files" ]; then
mv "$output_directory/$(basename "$folder")" "$zero_kb_directory"
echo "Moved $folder to $zero_kb_directory"
And this example where ChatGPT did this step of the process as a function within an earlier part of the workflow that sorts folders depending on file-extensions present on folder contents:
#!/bin/bash
input_directory="/Users/rj/autotest/testinputdirectory"
output_directory="/Users/rj/autotest/testoutputdirectory"
empty_folders_directory="/Users/rj/autotest/testoutputdirectory/!empty_folders"
# Function to check if a folder and its sub-folders contain only empty files
check_empty_folder() {
local folder="$1"
# Check if the folder contains only empty files
if [ -z "$(find "$folder" -type f -exec test -s {} \;)" ]; then
return 0 # Folder contains only empty files
else
return 1 # Folder contains non-empty files
fi
}
# Loop through each folder in the input directory
for folder in "$input_directory"/*; do
# Check if the folder contains files with ".downloading" or ".prog" extensions
if [ -n "$(find "$folder" -type f \( -name "*.downloading" -o -name "*.prog" \))" ]; then
echo "Skipping $folder"
else
# Move the whole folder to the output directory
mv "$folder" "$output_directory"
echo "Moved $folder to $output_directory"
# Check if the folder and its sub-folders contain only empty files
if check_empty_folder "$output_directory/$(basename "$folder")"; then
# Move the folder to the !empty_folders directory
mv "$output_directory/$(basename "$folder")" "$empty_folders_directory"
echo "Moved $folder to $empty_folders_directory"
fi
fi
done
I've tried the above as well as lots of variants. They either haven't worked at all (i.e. empty\_folders\_directory has nothing it it when it should); or have worked incompletely e.g.: some folders haven't been moved; or contents of folders end up in the root of empty\_folders\_directory (which should never be the case).
Any pointers mucha appreciated.
Thanks
https://redd.it/18v4vbt
@r_bash
I have been trying to use Mac Automator with bash shell noscripts to assist with some time consuming file management. One part of the workflow has got me stuck. I've tried asking ChatGPT which has proposed some code, but it either doesn't work at all, or works with errors. Grateful for any advice.
This is my situation:
* I have output\_directory that is full of folders. These folders contain files and sometimes also have multiple layers of sub-folders with files within.
* As part of a space-saving and depulication-prevention workflow, some files have been truncated to 0kb while preserving filename and location. This is done using the Mac terminal command: "find . -type f -exec truncate -s 0 {} \\;"
* I want to identify folders that are comprised ONLY of 0kb files (and any associated sub-folders) and move these entire folders to empty\_folders\_directory. File structure within the moved folder should be maintained.
* If a folder has a mix of 0kb files and non-0kb files the folder should remain in output\_directory.
I'm not quite sure why the code(s) I've tried haven't worked e.g.:
# Check if the folder contains only empty files
if [ -z "$(find "$output_directory/$(basename "$folder")" -mindepth 1 -type f -exec test -s {} \;)" ]; then
# Move the folder to the !empty_folders directory
mv "$output_directory/$(basename "$folder")" "$empty_folders_directory"
echo "Moved $folder to $empty_folders_directory"
e.g.
# Check if there are non-zero-length files within the folder (including sub-folders)
zero_length_files=$(find "$output_directory/$(basename "$folder")" -type f -size +0c)
if [ -z "$zero_length_files" ]; then
mv "$output_directory/$(basename "$folder")" "$zero_kb_directory"
echo "Moved $folder to $zero_kb_directory"
And this example where ChatGPT did this step of the process as a function within an earlier part of the workflow that sorts folders depending on file-extensions present on folder contents:
#!/bin/bash
input_directory="/Users/rj/autotest/testinputdirectory"
output_directory="/Users/rj/autotest/testoutputdirectory"
empty_folders_directory="/Users/rj/autotest/testoutputdirectory/!empty_folders"
# Function to check if a folder and its sub-folders contain only empty files
check_empty_folder() {
local folder="$1"
# Check if the folder contains only empty files
if [ -z "$(find "$folder" -type f -exec test -s {} \;)" ]; then
return 0 # Folder contains only empty files
else
return 1 # Folder contains non-empty files
fi
}
# Loop through each folder in the input directory
for folder in "$input_directory"/*; do
# Check if the folder contains files with ".downloading" or ".prog" extensions
if [ -n "$(find "$folder" -type f \( -name "*.downloading" -o -name "*.prog" \))" ]; then
echo "Skipping $folder"
else
# Move the whole folder to the output directory
mv "$folder" "$output_directory"
echo "Moved $folder to $output_directory"
# Check if the folder and its sub-folders contain only empty files
if check_empty_folder "$output_directory/$(basename "$folder")"; then
# Move the folder to the !empty_folders directory
mv "$output_directory/$(basename "$folder")" "$empty_folders_directory"
echo "Moved $folder to $empty_folders_directory"
fi
fi
done
I've tried the above as well as lots of variants. They either haven't worked at all (i.e. empty\_folders\_directory has nothing it it when it should); or have worked incompletely e.g.: some folders haven't been moved; or contents of folders end up in the root of empty\_folders\_directory (which should never be the case).
Any pointers mucha appreciated.
Thanks
https://redd.it/18v4vbt
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Copy file to a copied structure
I have a pictures folder on my Synology NAS, and within that are a number of albums, each with a set of photos and videos.
I occasionally want to share select photos with family by copying the files, but I want to keep the album structure so it's still viewable i.e. pictures/nans/70thbirthday/, or pictures/parents/10thanniversary/ etc. In reality the files are nested deeper than this, so I don't want to create the folders in target manually. As I don't want to copy the whole folder full of files, I was hoping to copy the file I want to share to a temporary folder, and then a noscript could check the source folders for the original location and replicate that in the family shared folder.
Source would be
I would want to copy file to
Then a bash noscript would find the location of the original file in the /pictures/ folder and recreate the folder structure to
I've been banging my head with find and grep but I don't really know what I'm doing, so haven't even been able to successfully extract the folder from any output.
I had been trying to use
Should I be using
https://redd.it/18uhcf5
@r_bash
I have a pictures folder on my Synology NAS, and within that are a number of albums, each with a set of photos and videos.
I occasionally want to share select photos with family by copying the files, but I want to keep the album structure so it's still viewable i.e. pictures/nans/70thbirthday/, or pictures/parents/10thanniversary/ etc. In reality the files are nested deeper than this, so I don't want to create the folders in target manually. As I don't want to copy the whole folder full of files, I was hoping to copy the file I want to share to a temporary folder, and then a noscript could check the source folders for the original location and replicate that in the family shared folder.
Source would be
/pictures/nans/70thbirthday/img_20220111115326.jpg where there could be 100's of other pictures. I would want to copy file to
/temp/pictures/img_20220111115326.jpgThen a bash noscript would find the location of the original file in the /pictures/ folder and recreate the folder structure to
/shared/events/ i.e. /shared/events/nans/70thbirthday/I've been banging my head with find and grep but I don't really know what I'm doing, so haven't even been able to successfully extract the folder from any output.
I had been trying to use
find '/volume2/pictures/albums/' -type d -name "*img_20220111115326.jpg*" without success.Should I be using
find, or is there a better command to use to set the original folders to a variable?https://redd.it/18uhcf5
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
license-generator: a bash noscript that will generate license for your next open source project
Just wrote this shell noscript which can generate license files. It uses Github's API to fetch license files and make modifications by adding name of project author & year to it. Here's the Github link.
Hadn't written in bash for a long time now, I would love to hear you guys' thoughts on the code. Thanks in advance!
https://redd.it/18ubien
@r_bash
Just wrote this shell noscript which can generate license files. It uses Github's API to fetch license files and make modifications by adding name of project author & year to it. Here's the Github link.
Hadn't written in bash for a long time now, I would love to hear you guys' thoughts on the code. Thanks in advance!
https://redd.it/18ubien
@r_bash
GitHub
GitHub - SamIsTheFBI/license-generator: A POSIX compliant shell noscript that generates license for your open source projects
A POSIX compliant shell noscript that generates license for your open source projects - GitHub - SamIsTheFBI/license-generator: A POSIX compliant shell noscript that generates license for your open sou...
Local -n vs declare -n
Whats the difference between local -n and declare -n when used inside the function?
Bash manual doesnt explain the difference when -n attribute is used for both.
https://redd.it/18to3jj
@r_bash
Whats the difference between local -n and declare -n when used inside the function?
Bash manual doesnt explain the difference when -n attribute is used for both.
https://redd.it/18to3jj
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Generating PNG files with text and "colorful emojis"
I know how to do it with a wide choice of options, but my emojis are all black and white and flat.
I want to get them colorful like on my phone.
I have a trannoscript of a WA chat. I have written code that converts the entire conversation into audio. Now I want to create a video to go with it, containing the actual messages sent back and forth including the emojis, and I really need them to be in color. For reasons!
​
Edit: After searching the depths of the web, I found a tool in imagemagick called Pango that supports this in current versions. I will test it out over the weekend and revert.
https://redd.it/18tku9y
@r_bash
I know how to do it with a wide choice of options, but my emojis are all black and white and flat.
I want to get them colorful like on my phone.
I have a trannoscript of a WA chat. I have written code that converts the entire conversation into audio. Now I want to create a video to go with it, containing the actual messages sent back and forth including the emojis, and I really need them to be in color. For reasons!
​
Edit: After searching the depths of the web, I found a tool in imagemagick called Pango that supports this in current versions. I will test it out over the weekend and revert.
https://redd.it/18tku9y
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
forkrun: the fastest pure-bash loop parallelizer ever written -- looking for "beta testers"
[LINK TO GITHUB REPO WITH CODE](https://github.com/jkool702/forkrun/tree/forkrun-v2_RC)
***
A year ago I started working on `forkrun` - a pure bash (well, almost pure bash) function that works to parallelize loops in much the same way that `xargs -P` and `parallel` do. 1 year, nearly 400 github commits, 1 complete rewrite, and I imagine several hundred hours worth of optimizing later, I do believe that `forkrun` (v2.0) is finally ready to be released.
Before I officially release it, Id love it if a few people would try it out and report any bugs they encounter. Ive thoroughly tested it on my Fedora 39 rig running bash 5.2.x, but other distros and older versions of bash is largely untested (NOTE: min bash version capable of running this is 4.0 due to the use of coprocs) .
Thanks in advance to anyone willing to test it out for me!
***
**USAGE**
There is detailed info in the github readme, but heres some brief usage instructions:
First, source `forkrun.bash` by running one of the following:
. <(curl https://raw.githubusercontent.com/jkool702/forkrun/forkrun-v2_RC/forkrun.bash)
or
wget https://raw.githubusercontent.com/jkool702/forkrun/forkrun-v2_RC/forkrun.bash
. ./forkrun.bash
or
git clone https://github.com/jkool702/forkrun.git --branch=forkrun-v2_RC
. ./forkrun/forkrun.bash
Then use it like you would `xargs`. The base (no flags) `forkrun` is roughly equivalent to `xargs -P $(nproc) -d $'\n'`. After sourcing it, you can display the full usage help (that described the available flags to tweak `forkrun`'s behavior) by running
forkrun --help=all
***
**EXAMPLE**
To compute the `cksum` of every file under the current directory, you would run
find ./ -type f | forkrun cksum
***
P.S. and yes, it really is that fast. My main speed testing has been computing 11 different checksums on ~500,000 mostly small files saved on a tmpfs ramdisk with a total combined size of ~19 gb. The speedtest code + results are [in the github repo](https://github.com/jkool702/forkrun/blob/forkrun-v2_RC/forkrun.speedtest.bash), but to summarize:
* on average it was 70% faster than `xargs -P $(nproc) -d $'\n'`, which is the fastest loop parallelizer I know of (not counting `forkrun`). For the lighter weight checksums like `cksum` and `sum -s` is was closer to 3x faster. Note that this is the fastest implementation of `xargs` (it isnt being crippled by using `-l 1` or `-n 1`), and `xargs` itself is a compiled C binary. Thats right, `forkrun` parallelizes loops faster than the fastest compiled C loop parallelizer I could find.
* on average it is \~7x as fast as `parallel -m`. For the lighter weight checksums like `cksum` and `sum -s` is was >18x faster.
* on my hardware, `forkrun` was computing the lightweight checksums (`cksum` and `sum -s`) on all ~19 gb worth of ~500,000 files in about 1.1 seconds (outputting to `wc -l`), not printing to the terminal)
As such, In can all but guarantee this is the fastest loop parallelizer written in bash that has ever been written. See the github readme if you are curious what makes `forkrun` so fast.
Note: "fast" is referring to "wall clock time". In terms of CPU time `xargs` is a bit better (though not *that* much), but forkrun parallelizes things so well it is faster in "real" execution time.
EDIT: fixed formatting issue.
https://redd.it/18sfjtz
@r_bash
[LINK TO GITHUB REPO WITH CODE](https://github.com/jkool702/forkrun/tree/forkrun-v2_RC)
***
A year ago I started working on `forkrun` - a pure bash (well, almost pure bash) function that works to parallelize loops in much the same way that `xargs -P` and `parallel` do. 1 year, nearly 400 github commits, 1 complete rewrite, and I imagine several hundred hours worth of optimizing later, I do believe that `forkrun` (v2.0) is finally ready to be released.
Before I officially release it, Id love it if a few people would try it out and report any bugs they encounter. Ive thoroughly tested it on my Fedora 39 rig running bash 5.2.x, but other distros and older versions of bash is largely untested (NOTE: min bash version capable of running this is 4.0 due to the use of coprocs) .
Thanks in advance to anyone willing to test it out for me!
***
**USAGE**
There is detailed info in the github readme, but heres some brief usage instructions:
First, source `forkrun.bash` by running one of the following:
. <(curl https://raw.githubusercontent.com/jkool702/forkrun/forkrun-v2_RC/forkrun.bash)
or
wget https://raw.githubusercontent.com/jkool702/forkrun/forkrun-v2_RC/forkrun.bash
. ./forkrun.bash
or
git clone https://github.com/jkool702/forkrun.git --branch=forkrun-v2_RC
. ./forkrun/forkrun.bash
Then use it like you would `xargs`. The base (no flags) `forkrun` is roughly equivalent to `xargs -P $(nproc) -d $'\n'`. After sourcing it, you can display the full usage help (that described the available flags to tweak `forkrun`'s behavior) by running
forkrun --help=all
***
**EXAMPLE**
To compute the `cksum` of every file under the current directory, you would run
find ./ -type f | forkrun cksum
***
P.S. and yes, it really is that fast. My main speed testing has been computing 11 different checksums on ~500,000 mostly small files saved on a tmpfs ramdisk with a total combined size of ~19 gb. The speedtest code + results are [in the github repo](https://github.com/jkool702/forkrun/blob/forkrun-v2_RC/forkrun.speedtest.bash), but to summarize:
* on average it was 70% faster than `xargs -P $(nproc) -d $'\n'`, which is the fastest loop parallelizer I know of (not counting `forkrun`). For the lighter weight checksums like `cksum` and `sum -s` is was closer to 3x faster. Note that this is the fastest implementation of `xargs` (it isnt being crippled by using `-l 1` or `-n 1`), and `xargs` itself is a compiled C binary. Thats right, `forkrun` parallelizes loops faster than the fastest compiled C loop parallelizer I could find.
* on average it is \~7x as fast as `parallel -m`. For the lighter weight checksums like `cksum` and `sum -s` is was >18x faster.
* on my hardware, `forkrun` was computing the lightweight checksums (`cksum` and `sum -s`) on all ~19 gb worth of ~500,000 files in about 1.1 seconds (outputting to `wc -l`), not printing to the terminal)
As such, In can all but guarantee this is the fastest loop parallelizer written in bash that has ever been written. See the github readme if you are curious what makes `forkrun` so fast.
Note: "fast" is referring to "wall clock time". In terms of CPU time `xargs` is a bit better (though not *that* much), but forkrun parallelizes things so well it is faster in "real" execution time.
EDIT: fixed formatting issue.
https://redd.it/18sfjtz
@r_bash
GitHub
GitHub - jkool702/forkrun at forkrun-v2_RC
runs multiple inputs through a noscript/function in parallel using bash coprocs - GitHub - jkool702/forkrun at forkrun-v2_RC
Script to relink broken alias files with new path?
Hi, is there any way to get this done? I have no experience with noscripting, but together with ChatGPT I failed massively to get this done in Terminal on OSX (10.14.6)
From a stupid user perspective:
1. Open Finder-GUI to choose Folder (including subfolder) for damaged/unliked Alias files
2. Check those files for unlinked Aliases.
3. Open Finder-GUI to choose Folder (incl. subfolders) which contains the new destination of the original files.
4. Do the work - restore all Alias links with the new original paths (only for those files, which had a damaged Alias of course).
I cannot find a software that claims to do that on OSX. I am so desperately in need of this function because I work with a software which relies on Aliases for it's internal file management system, and after I did some major reorganisation of my hard drives, I'm left with hundrets of unlinked Aliases..... :(
https://redd.it/18w0sog
@r_bash
Hi, is there any way to get this done? I have no experience with noscripting, but together with ChatGPT I failed massively to get this done in Terminal on OSX (10.14.6)
From a stupid user perspective:
1. Open Finder-GUI to choose Folder (including subfolder) for damaged/unliked Alias files
2. Check those files for unlinked Aliases.
3. Open Finder-GUI to choose Folder (incl. subfolders) which contains the new destination of the original files.
4. Do the work - restore all Alias links with the new original paths (only for those files, which had a damaged Alias of course).
I cannot find a software that claims to do that on OSX. I am so desperately in need of this function because I work with a software which relies on Aliases for it's internal file management system, and after I did some major reorganisation of my hard drives, I'm left with hundrets of unlinked Aliases..... :(
https://redd.it/18w0sog
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Pipe output to a file with auto incremented name?
I like doing
This has progressed to
Is there a utility or noscript that would let me do just
https://redd.it/18w3vt5
@r_bash
I like doing
> temp-file.txt for output of some commands that I might need later.This has progressed to
> ../tmp/2024-01-01-001.txt, but writing the timestamps and index numbers gets tedious.Is there a utility or noscript that would let me do just
> keep or something similar? Seems like a common use case but after a couple of google searches I didn't find anything.https://redd.it/18w3vt5
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Collection Scrips
Hey Guzs , I am collection bash noscripts that shortens the tasks
here is contribution link Bash-Baby
https://redd.it/18wm2p0
@r_bash
Hey Guzs , I am collection bash noscripts that shortens the tasks
here is contribution link Bash-Baby
https://redd.it/18wm2p0
@r_bash
GitHub
GitHub - shreyasSarve/bash-baby: This repository contains bash noscript for time saving
This repository contains bash noscript for time saving - GitHub - shreyasSarve/bash-baby: This repository contains bash noscript for time saving