Y a-t-il une raison objective de préférer une forme à l'autre? Performance, fiabilité, portabilité? filename=/some/long/path/to/a_file parentdir_v1="${filename%/*}" parentdir_v2="$(dirname "$filename")" basename_v1="${filename##*/}" basename_v2="$(basename "$filename")" echo "$parentdir_v1" echo "$parentdir_v2" echo "$basename_v1" echo "$basename_v2" Produit: /some/long/path/to /some/long/path/to a_file a_file (v1 utilise l'expansion des paramètres du shell, v2 utilise des binaires externes.)
Je regarde le code affiché ci-dessous et il vérifie l'entrée si les arguments de ligne / colonne commencent par soit -rou -c. Que ${1:0:2}signifie dans ce contexte? rowArgName="-r" colArgName="-c" if [ "${1:0:2}" != $rowArgName ] && [ "${1:0:2}" != $colArgName ] then echo $correctCmdMsg >&2 exit 1 fi
J'essaie de ls certains fichiers avec un modèle dans un répertoire. Je veux seulement scanner le premier niveau non récursif. Mon script: for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*) do echo $i; done La commande ci-dessus balaye récursivement. Comment peut-il faire uniquement pour analyser le répertoire de premier niveau?
Je voudrais m'assurer qu'à un certain point d'un script, après avoir sourcecréé un fichier de configuration, plusieurs variables sont définies et, si ce n'est pas le cas, arrêter l'exécution en informant l'utilisateur de la variable manquante. j'ai essayé for var in $one $two $three ; do ... mais si par …
Je sais que je peux attendre une condition pour devenir vrai en bash en faisant: while true; do test_condition && break sleep 1 done Mais il crée 1 sous-processus à chaque itération (sommeil). Je pourrais les éviter en faisant: while true; do test_condition && break done Mais il utilise beaucoup …
J'essaie d'ajouter un en-tête de licence à tous les fichiers d'en-tête et fichiers source dans un répertoire de projet à l'aide d'une boucle for. Cela ne fonctionne pas, existe-t-il une autre approche sed?
J'essaie d'écrire tous mes shscripts startup / env pour travailler avec autant de DRY et autant: "fonctionne sur chaque * nix sur lequel je le clone", autant que possible. Cela signifie m'assurer que si j'essaie d'exécuter du code qui n'est pas là, que le code échoue gracieusement. À cette fin, …
J'ai un dossier avec de nombreux fichiers (xyz1, xyz2, jusqu'à xyz5025) et j'ai besoin d'exécuter un script sur chacun d'eux, obtenant xyz1.faa, xyz2.faa, etc. en tant que sorties. La commande pour un seul fichier est: ./transeq xyz1 xyz1.faa -table 11 Existe-t-il un moyen de le faire automatiquement? Peut-être un combo …
J'hésite toujours beaucoup à jouer $IFSparce que ça fait trembler un monde. Mais souvent, cela rend le chargement des chaînes dans un tableau bash agréable et concis, et pour les scripts bash, la concision est difficile à trouver. Je pense donc que cela pourrait être mieux que rien si j'essaie …
Supposons que j'ai trois (ou plus) scripts bash: script1.sh, script2.shet script3.sh. Je voudrais appeler ces trois scripts et les exécuter en parallèle . Pour ce faire, vous pouvez simplement exécuter les commandes suivantes: nohup bash script1.sh & nohup bash script2.sh & nohup bash script3.sh & (En général, les scripts peuvent …
J'ai un script bash avec diverses instructions if basées sur des arguments de ligne de commande que je transmets lors de l'appel. Avoir une sorte de sortie sur les commandes en cours d'exécution est utile pour confirmer le flux à travers toutes ces instructions if, mais ma solution actuelle me …
Quelle est la meilleure façon de supprimer la sortie (stdout et stderr) à moins que le programme ne se termine avec un code différent de zéro? Je pense: quiet_success() { file=$(mktemp) if ! "$@" > "$file" 2>&1; then cat "$file" fi rm -f "$file" } Et courez, quiet_success my_long_noisy_script.shmais je …
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.