Как передать аргумент из сценария bash в 'x-terminal-emulator -e bash -c'?

Предположим, у меня есть этот скрипт:

x-terminal-emulator -e bash -c 'echo hello > ~/text' 

Я называю его foo.sh и делает его исполняемым.

Если я выполню этот скрипт, у меня будет текстовый файл в моей домашней папке, содержащий слово «привет».

Теперь, если я изменю его на это:

 x-terminal-emulator -e bash -c 'echo $1 > ~/text' 

… и я выполняю его в терминале следующим образом:

 ./foo.sh hello 

Я получаю текстовый файл в моей домашней папке, содержащей ничего.

foo.sh получает 'hello' как первый и единственный аргумент ($ 1). Так почему же bash не получает его? Есть ли способ передать один или несколько аргументов из foo.sh в bash?

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

Извините, если этот вопрос звучит глупо, я пробовал искать Google и этот сайт, не найдя ответа.

2 Solutions collect form web for “Как передать аргумент из сценария bash в 'x-terminal-emulator -e bash -c'?”

От man bash

 -c If the -c option is present, then commands are read from the first non-option argument command_string. If there are arguments after the command_string, they are assigned to the positional parameters, starting with $0. 

Таким образом, вы можете сделать

 x-terminal-emulator -e bash -c 'echo $0 > ~/text' "$1" 

или (если вы предпочитаете сохранять «обычную» нумерацию параметров)

 x-terminal-emulator -e bash -c 'echo $1 > ~/text' _ "$1" 

где _ можно заменить любой фиктивной переменной по вашему выбору.

В bash -c 'echo $1 > ~/text' , $1 был расширен в процессе bash -c , а не в вашем скрипте. Вам нужно передать исходные $1 в bash -c :

 x-terminal-emulator -e "bash -c 'echo \$1 > ~/text' bash $1" 
Interesting Posts
Linux и Unix - лучшая ОС в мире.