Điểm:1

GNU make executes weird shell

lá cờ cn

The shell function in GNU make behaves weird on Ubuntu. Consider this simple Makefile:

TEST1 := $(shell command -v sh)
TEST2 := $(shell /bin/sh -c 'command -v sh')
all:
        $(info TEST1 = $(TEST1))
        $(info TEST2 = $(TEST2))

Running make prints

make: command: Command not found
TEST1 = 
TEST2 = /usr/bin/sh

Weird. Why does the default shell not know the command built-in? And what is the default shell invoked by GNU make actually? According to the GNU make manual:

The program used as the shell is taken from the variable SHELL. If this variable is not set in your makefile, the program /bin/sh is used as the shell.

There is no SHELL variable in the Makefile above, so the shell should be /bin/sh. However, running /bin/sh explicitly from the default shell actually behaves as expected, so there must be some difference.

So what is the real problem? It seems to be specific to GNU make packaged in Ubuntu, since the aforementioned Makefile behaves as expected on other systems like Arch Linux (which symlinks /bin/sh to bash rather than dash, though), i.e. it prints TEST1 = /usr/bin/sh.

lá cờ hr
Hừm...thú vị. Dựa trên đầu ra `strace`, có vẻ như nó hoàn toàn không sử dụng trình bao (thay vào đó chuyển trực tiếp lệnh + args tới `execve`), cả khi biến tạo `SHELL` không được xác định ** hoặc ** được đặt thành `/bin/sh `. Dường như có thể lừa nó sử dụng `sh` trên các hệ thống trong đó /bin và /usr/bin được liên kết tượng trưng bằng cách đặt `SHELL=/usr/bin/sh`.
Jakub Klinkovský avatar
lá cờ cn
Arch Linux cũng liên kết tượng trưng `/bin` với `/usr/bin` và nó hoạt động tốt, có và không có `SHELL := /bin/sh`. Vậy đâu là sự khác biệt giữa việc sử dụng `SHELL := /bin/sh` và `SHELL := /usr/bin/sh` trên Ubuntu?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.