Если вы вызываете эмулятор терминала из командной строки -в другом эмуляторе терминала, он (обычно )создает новое окно, а затем возвращается к командной строке в первом эмуляторе терминала. Исходя из этого, что-то вроде:
#!/bin/bash
cd python
<whatever-terminal-emulator> --command gnuplot
Должно получиться то, что вы хотите (хотя --command
опция может отличаться, если вы используете действительно простой эмулятор терминала, такой как xterm (для них, вы обычно просто опускаете --command
опция ).
Я предполагаю, что вы знаете, что echo "$(somecommand)"
можно просто заменить на somecommand
, так как echo
не требуется для вывода вывода команды, и что вы используете эту конструкцию только в качестве примера.
Команда echo $(ls "$DIR")
«работает», потому что ls "$DIR"
выводит abcfile
, который выводит echo
.
Заключение подстановки команды в данном случае ничего не изменит. Строку abcfile
не нужно заключать в кавычки, если вы не измените $IFS
, чтобы включить символы, присутствующие в этом имени файла (, см. почему ниже ).
Однако,рассмотреть
A B C/
|-- A*
`-- abcfile
Сейчас:
$ echo "$(ls "$DIR")"
A*
abcfile
$ echo $(ls "$DIR")
A B C abcfile
Вы заметите, что в последнем выводе имя файла A*
расширено как шаблон подстановки имени файла, который соответствует имени каталога A B C
. Вы также заметите, что мы потеряли новую строку, которую выводил ls
.
Новая строка была потеряна, потому что оболочка выполнила разбиение слова -на вывод без кавычек ls
, разбив его на слова по пробелам, табуляциям и символам новой строки (содержимое по умолчанию $IFS
).
Имя каталога A B C
было вставлено, потому что слова, сгенерированные при разбиении слов, подверглись генерации имени файла(подстановке ).
Если бы имя нового файла было A* A*
, имя каталога было бы вставлено дважды:
A B C/
|-- A* A*
`-- abcfile
$ echo $(ls "$DIR")
A B C A B C abcfile
Связанные: