У меня была такая же проблема с Rubymine, где я не смог скопировать Rubyine и вставить в терминал с CTRL-SHIFT-V. Учитывая, что я делаю это десятки раз в день, у меня мало интересовалось копирование в gedit каждый раз, а затем копирование на терминал, поэтому я выяснил решение, которое этого не требует:
http: // www.williambharding.com/blog/technology/fix-it-ubuntu-ctrl-shift-v-wont-paste-into-terminal/
Рассказ: OpenJDK не играет хорошо с буфером обмена. Я предполагаю, что это применимо к Netbeans, а также к Rubymine, поскольку они запускаются через виртуальную машину Java.
Прежде всего, не разбирайте ls. Теперь причина, по которой ваш скрипт терпит неудачу, заключается в том, что вы проходите "$PWD/*". Поскольку это приостановлено, оно будет расширено до того, как оно будет передано вашей функции в /path/to/dir/*, и поскольку в вашем PWD нет файла с именем *, он не работает.
Однако, даже если бы это сработало, это привело бы вас в бесконечный цикл.
То, что вы ищете, это:
#!/bin/bash
function loop() {
## Do nothing if * doesn't match anything.
## This is needed for empty directories, otherwise
## "foo/*" expands to the literal string "foo/*"/
shopt -s nullglob
for file in $1
do
## If $file is a directory
if [ -d "$file" ]
then
echo "looping for $file"
loop "$file/*"
else
echo "$file"
fi
done
}
loop "$PWD/*"
однако, не удастся, если ваш PWD содержит пробельные символы. Более безопасный способ:
#!/bin/bash
function loop() {
## Do nothing if * doesn't match anything.
## This is needed for empty directories, otherwise
## "foo/*" expands to the literal string "foo/*"/
shopt -s nullglob
## Make ** recurse into subdirectories
shopt -s globstar
for file in "$@"/**
do
## If $file is a file
if [ -f "$file" ]
then
echo "$file"
fi
done
}
loop "$PWD"