Mam skrypt basha, który odbiera zestaw plików od użytkownika. Te pliki są czasami w katalogach ze spacjami w ich nazwach. Niestety w przeciwieństwie do this question wszystkie nazwy plików są przekazywane za pośrednictwem interfejsu wiersza poleceń. Załóżmy, że ścieżki są poprawnie cytowane, ponieważ są one przekazywane przez użytkownika, więc spacje (zapisz w cudzysłowach) są ogranicznikami między ścieżkami. Jak przesłać te parametry do podprogramu w moim skrypcie Bash w sposób, który zachowa cytowane spacje?bash: przekazywanie ścieżek ze spacjami jako parametrami?
Odpowiedz
#! /bin/bash
for fname in "[email protected]"; do
process-one-file-at-a-time "$fname"
done
Uwaga na nadmierne wykorzystanie ofert. Wszystko jest konieczne.
Przechodząc wszystkie argumenty do innego programu jest jeszcze prostsza:
process-all-together "[email protected]"
Trudne sprawa jest, gdy chcesz podzielić argumenty na pół. To wymaga dużo więcej kodu w prostej powłoce POSIX. Ale może Bash ma jakieś specjalne cechy.
"$var"
Na przykład
$ var='foo bar'
$ perl -E'say "<<$_>>" for @ARGV' $var
<<foo>>
<<bar>>
$ perl -E'say "<<$_>>" for @ARGV' "$var"
<<foo bar>>
Chcesz "[email protected]"
, który posiada specjalną składnię rozszerza [email protected]
ale zachowując white-space powołując rozmówcy (nie utworzyć jeden gigantyczny ciąg ze wszystkimi argumenty w nim zawarte). Więc ktoś może wywołać skrypt jak:
bash-script.sh AFile "Another File With Spaces"
Następnie w skrypcie można robić takie rzeczy jak:
for f in "[email protected]"; do
echo "$f";
done
i dostać dwa wiersze wyjścia (nie 5).
Przeczytaj paragraf o parametrze Special "@" tutaj: http://www.gnu.org/s/bash/manual/bash.html#Special-Parameters
Bravo @Roland. To dużo dla twojego rozwiązania
To naprawdę zadziałało!
Napisałem prostą funkcję skryptu, która otwiera daną ścieżkę z Nautilusem.
I właśnie zagnieżdżone funkcję z tego „pomocnika” -do pętli do głównej funkcji:
fmp() {
fmp2() {
nautilus "[email protected]";
};
for fname in "[email protected]";
do
fmp2 "$fname";
done;
}
teraz jestem w stanie zrobić wszystko moje skrypty postępowania Pracować ze ścieżkami po prostu obracając je do zagnieżdżonych funkcji zapakowanych przez funkcję z tą helper-for-loop.
- 1. PowerShell - przekazywanie obliczonych ścieżek ze spacjami
- 2. bash sortuj niezwykłą kolejność. Problem ze spacjami?
- 3. Obsługa argumentów wiersza poleceń Perl ze spacjami ze skryptu bash?
- 4. Przekazywanie funkcji (z parametrami) jako parametru?
- 5. Przekazywanie ciągu znaków spacji jako argumentu funkcji w bash
- 6. BASH Skrypt do katalogu cd ze spacjami w ścieżce
- 7. Bash skrypt, aby przekonwertować ciąg ze spacjami żetonów do tablicy
- 8. Przekazywanie "*()" jako argumentu do programu w bash
- 9. Przekazywanie danych binarnych jako argumentów w bash
- 10. Łączenie ciągów ze spacjami
- 11. tablica Słowo ze spacjami
- 12. re.split ze spacjami w python
- 13. C# - Web API - Serializing Enums jako ciągi ze spacjami
- 14. Dzielenie/proc/cmdline ze spacjami
- 15. ElasticSearch dla warunków ze spacjami
- 16. UrlPathEncode nie ucieka ze spacjami
- 17. Jak wybierać klasy ze spacjami?
- 18. Dostęp klasy Properties ze spacjami
- 19. Powtórzenie listy plików ze spacjami
- 20. Aptana: znajdź i zamień tabulatory (ze spacjami)
- 21. MNIEJ @import: przekazywanie ścieżek do lessc
- 22. Jak przekazać ścieżkę ze spacjami i końcowe ukośnik odwrotny do MSBuild jako własność
- 23. PowerShell Otwarcie Ścieżka pliku ze spacjami
- 24. Jak uruchomić plik EXE w PowerShell z parametrami ze spacjami i cudzysłowami
- 25. tylko linie łączenia ze spacjami w Pythonie
- 26. Przekazywanie zmiennych bash do skryptu?
- 27. Przekazywanie operatora wraz z innymi parametrami
- 28. Wykonanie z parametrami
- 29. Jak używać difac emacs ze spacjami?
- 30. Obsługa katalogów ze spacjami Python subprocess.call()
Dzięki; co jeśli muszę je przetworzyć zbiorczo? – fbrereto
Zaktualizowałem moją odpowiedź. –
Upewnij się również, że podprogram prawidłowo podwójnie cytuje wszystko, np. 'process-one-file-at-a-time() {cp" $ 1 "" backupdir/$ (basename "$ 1") "; } ' –