Thecrucial thing is to realise that this is a universal problem. Every lawyer has one of these files (I often ask at lectures and, over the years, only one person has said they did not [his colleagues later cast much doubt on this]). Further there is plenty of material out there (a lot of it American) which can usefully be adapted. Here I have some links to useful on-line guides.
Working as a Senior Fullstack Developer at Yummy Publishing(previously valantic, Sulu andMASSIVE ART),
lecturing at the Vorarlberg University of Applied Sciences,
founded and co-organizing the VlbgWebDev meetup,
used to co-organize AgentConf.
Recently I have downloaded some submissions from a course I am currently giving. Luckily the tool being used allows todownload an archive with all submissions at once, but unfortunately the structure of the archive is not really handy. Itcontained a folder for every student, and in this folder there was another zip archive, which contained the actualsubmission of the given student.
In addition to that every single archive contained a JavaScript project, in each of which I had to executenpm install in order to test the submission afterwards. So I could either go into each folder, unzip the archive andinstall the NPM packages for each and every one of them. Or I could take some time, and figure out how to unzip allarchives and install the required packages with two small command line scripts.
ls is usually used to list the content of entire directories, but also allows to list files being passed to it. Thisis really useful in combination with thewildcards the fish shell provides. fish tries to match the*/*.zip expression to as many files as possible, whereby the * can be a string of any length not containing /,which is the folder delimiter in linux. That means it will find any arbitrarily named file ending in .zip beinglocated directly in a sub folder of the current directory. So the above command returned file names likeerika_mustermann/submission.zip and john_doe/assignment.zip for me, which indicated that I was on the right track. Ialways start tasks like that this way, because I want to make sure that I am not accidentally executing the commands forthe wrong files.
Basically the for loop in fish is a simple for .. in construct, whereby the name after the for is being used asthe variable name (mind that it is defined without a prefix, but when accessing it a $ is required), and the partbetween in and ; is the expression that is being looped over, which is every file that matches the glob in our case.Other than some differences in whitespaces the output should be pretty much the same as in the previous ls command.
For some reason I was always a bit hesitant when using loops in the command line. Somehow the command line always feltto me like something to which I enter a single command and get a result in return, which is a pretty simple protocol.Using stuff like pipes still felt ok to me, but a loop might need to be broken into multiple lines quite quickly, whichdoes not feel natural to me. But it is probably a much bigger time saver than other features of shells, so I checkingthem out is highly recommended!
Fish is a fully-equipped command line shell (like bash or zsh) that is smart and user-friendly. Fish supports powerful features like syntax highlighting, autosuggestions, and tab completions that just work, with nothing to learn or configure.
This prompt that you see above is the fish default prompt: it shows your username, hostname, and working directory.- to change this prompt see how to change your prompt- to switch to fish permanently see Default Shell.
This works the other way around as well! If fish is started by something else, it inherits that parents exported variables. So if your terminal emulator starts fish, and it exports $LANG set to en_US.UTF-8, fish will receive that setting. And whatever started your terminal emulator also gave it some variables that it will then pass on unless it specifically decides not to. This is how fish usually receives the values for things like $LANG, $PATH and $TERM, without you having to specify them again.
The set command above used quotes to ensure that Mister Noodle was one argument. If it had been two arguments, then name would have been a list of length 2. In fact, all variables in fish are really lists, that can contain any number of values, or none at all.
Command substitutions use the output of one command as an argument to another. Unlike other shells, fish does not use backticks `` for command substitutions. Instead, it uses parentheses with or without a dollar:
Unlike other shells, fish does not split command substitutions on any whitespace (like spaces or tabs), only newlines. Usually this is a big help because unix commands operate on a line-by-line basis. Sometimes it can be an issue with commands like pkg-config that print what is meant to be multiple arguments on a single line. To split it on spaces too, use string split.
Unlike other shells, there is no prompt variable like PS1. To display your prompt, fish executes the fish_prompt function and uses its output as the prompt. And if it exists, fish also executes the fish_right_prompt function and uses its output as the right prompt.
In The Fish Files, you play as Dante, a college student in search of his kidnapped fish, Ramada. This is a traditional inventory-based, point-and-click adventure game in the style of the LucasArts classics.
However, when I looked over the contents of the config.fish file, I couldn't figure out anything that would need to be put there. To my understanding, fish is designed to work already out of the box, so the usual bash config like setting HISTCONTROL isn't necessary. Nor are the conf.d/ files called from some main script (like the .bash_aliases, etc., would be in .bashrc) - they're loaded automatically.
Is there some particular use case where config.fish is preferred - or even required - over conf.d/ files? So far, I would say individual files are cleaner to read, maintain and move between hosts. Is there some convention that's recommended to follow? Was there a specific motivation behind allowing so many levels of config, aside from giving users more freedom?
First, and probably most importantly, as @Zanchey points out in the comments, conf.d support came about in release 2.3.0, so getting rid of config.fish at that point would have been a breaking change.
Next, it's also somewhat "path of least resistance". I definitely share your preference for the modularity of conf.d/ files, and I love not having a config.fish myself. But some (perhaps even most) users who are moving over to fish for the first time default to the familiarity of a single .bash_profile-like place to put their config. I can imagine that the paradigm shift of not having a single-file config might be off-putting to some. In other words, config.fish helps provide a smooth migration for new users.
Further, config.fish is easier to explain to a new user, since it maps to something they already know in their previous shell. Even the fish FAQ defaults to telling users that config.fish is the equivalent of their previous startup scripts. Although I do wish they'd go on to explain the conf.d/ alternative as well there.
And config.fish does have one other small advantage, in that the execution order is more explicit (i.e. it's executed start to end). conf.d/ files are read just like any other conf.d/, in alphabetical order (or glob-result order, most likely). In my experience, this means that you have to resort to 00_dependency.fish type of naming to ensure that one file is run before others. That said, it should rare that anyone would have to resort to that.
This is a wonderfully charming video documenting the history and practice of tinned fish in Portugal. This centuries long tradition is one that has sustained generations, and continues to provide healthy and delicious tinned fish to the Portuguese as well as the rest of the world.
The past couple of years have been something of a renaissance for tinned fish. Seemingly all of a sudden, eating fish from a can has transformed from the mayo-drowned mush of a midwestern lunchbox to the high-class wine pairing we see at tapas bars and in Instagram stories. But what exactly pushed tinned fish into its own Cinderella story? ...or perhaps the better question is, who?
Between his love of good food and esteemed reputation as a chef, he turned back to his tinned fish roots by writing an entire cookbook on the subject. In the summer of 2021, McDade released The Magic of Tinned Fish. The book includes recipes accessible to anyone who has a box of pasta and a can of fish in their pantries. Steering away from overfished tuna, McDade highlights more sustainable fish choices in his recipes including anchovies, sardines, mackerel, and crab.
In addition to these incredible foodies, serendipitous timing has helped boost the tinned fish market. Quarantine highlighted a need for shelf-stable food, and all the tinned fish lovers capitalized on the opportunity to share their favorite products. But while the pandemic may have catalyzed the recent increase in demand for tinned fish, there are infinite reasons for it to stay. Sustainable and an excellent source of protein and nutrition, tinned fish has found its way to fine dining establishments and into your favorite food blogs.
In many cases local anglers, federal agencies and other partners help in the creation and placement of these fish attractors. Anglers also are encouraged to build attractors of their own to create hidden fishing hot spots. It is important to call the owner of the lake where you would like to sink fish attractors to make sure they are allowed.
We are recruiting MS students interested in speciation genomics for an NSF CAREER-funded project on diversification in rockfish (see Projects). Other research projects in the lab range from population genomics to environmental metagenomics, and include diverse organisms from microbes to fishes to whales. Our primary research interests focus on uncovering the microevolutionary processes that shape biodiversity in marine and freshwater ecosystems, particularly in the context of global change. As fundamental aspects of our work, we strive to broaden participation in the sciences, build a strong community of researchers in the lab, and to develop innovative genomic methods that inform evolutionary and conservation science.
3a8082e126