2014-12-03 2 views
0

Это, вероятно, довольно простой, но я целый день нашел ответ без особого успеха.вывод в файл в каталоге сценариев

У меня есть исполняемый скрипт, который находится в ~/Desktop/shell/myScript.sh

Я хочу, чтобы команда одной строки, чтобы запустить этот скрипт из моего терминала, который выводит на новый каталог в той же директории, где скрипт находится независимо от того, что мой настоящий рабочий каталог есть.

я использовал:

mkdir -p tmp && 
    ./Desktop/shell/myScript.sh|grep '18x18'|cut -d":" -f1 > tmp/myList.txt 

Но он создает новый каталог в рабочем каталоге, а не на целевом месте.

Любая помощь будет оценена по достоинству.

Спасибо!

+2

Существует нет способ запускать 'mkdir -p tmp && somescript' и влиять на' somescript', где создается каталог. Вы можете переписать сценарий так, чтобы вы могли запускать 'somescript tmp/myList.txt' и иметь скрипт [искать его каталог] (http://stackoverflow.com/questions/59895/can-a-bash-script- tell-what-directory-its-stored-in) и записать файл. –

+0

Благодарим за ответ. Давайте проигнорируем часть mkdir и просто выведем в каталог скрипта, а не текущий рабочий каталог, каковы мои параметры? –

+0

Подобным образом не существует возможности запускать 'somescript> tmp/myList.txt' и влиять на' somescript' там, где файл написан. Как уже упоминалось, вы можете переписать сценарий так, чтобы вы могли запускать 'somescript tmp/myList.txt', а затем помещать, например. 'echo text>"/my/dir/$ 1 "' в скрипте для записи в '/ my/dir/tmp/myList.txt' –

ответ

1

Вы могли бы решить эту проблему в одной строке, если вы заранее определить переменную:

export LOC=$HOME/Desktop/shell 

Тогда вы можете сказать

mkdir -p $LOC/tmp && $LOC/myScript.sh | grep '18x18' | cut -d":" -f1 > $LOC/tmp/myList.txt 

Но если вы делаете это несколько раз, что может быть лучше долго -term обернуть myScript.sh, чтобы он создавал каталог и перенаправлял вывод для вас. Параметры grep и cut, а также имя выходного файла будут переданы в качестве аргументов командной строки и параметров в оболочку.

1

Как об этом:

SCRIPTDIR="./Desktop/shell/" ; mkdir "$SCRIPTDIR/tmp" ; "$SCRIPTDIR/myScript.sh" | grep '18x18' | cut -d ":" -f 1 > "$SCRIPTDIR/tmp/myList.txt" 

В вашем случае вы должны дать путь к сценарию в любом случае. Если вы поместите скрипт в путь, где он автоматически выполняется поиск, например. $HOME/bin, и вы можете просто ввести myScript.sh без префикса каталога, вы можете использовать SCRIPTDIR=$(dirname $(which myScript.sh)).

Смешивание каталогов с двоичными файлами и файлами данных, как правило, плохая идея. Для временных файлов /tmp - это то место, куда можно пойти. Подумайте, что ваш скрипт может стать известным и установить администратором в /usr/bin и одновременно работать несколькими людьми. По этой причине попробуйте подумать mktemp.

1

ВАШ СЦЕНАРИЙ может сделать это для вас с некоторыми КОДОВ

Вместо того, чтобы делать это вручную из командной строки, и кто знает, где вы будете двигаться сценарий и поставить его. добавьте следующие коды

[1] Найти ваше местоположение каталога с помощью сценария Dirname

script_directory=`dirname $0` 

Приведенный выше код будет найти свой каталог сценарий и сохранить его в переменной.

[2] Создать папку «TMP» в директории скрипта

mkdir "$script_directory/tmp 2> /dev/null" 

Приведенный выше код будет создать каталог под названием «TMP» в каталоге сценариев. Если каталог существует, mkdir не будет перезаписывать любой существующий каталог, используя эту командную строку, и дал ошибку. Я скрыть все ошибки, «2>/Dev/нуль»

[3] Откройте свой сценарий и изменить его с помощью «вырезать» и затем перенаправить вывод в новый файл

cat "$0"|grep '18x18'|cut -d":" -f1 > "$script_directory"/tmp/myList.txt 
Смежные вопросы